{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对应`tf.kears` 版本的03，在训练过程中加入更多的控制\n",
    "\n",
    "1. 训练中保存/保存最好的模型\n",
    "2. 早停 \n",
    "3. 训练过程可视化\n",
    "\n",
    "<font color=\"red\">注</font>: 使用 tensorboard 可视化需要安装 tensorflow (TensorBoard依赖于tensorflow库，可以任意安装tensorflow的gpu/cpu版本)\n",
    "\n",
    "```shell\n",
    "pip install tensorflow\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.761748Z",
     "start_time": "2025-01-16T13:31:57.755392Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)  #设备是cuda:0，即GPU，如果没有GPU则是cpu\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 1.26.4\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.0\n",
      "torch 2.5.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "execution_count": 19
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.876520Z",
     "start_time": "2025-01-16T13:31:57.813831Z"
    }
   },
   "source": [
    "from torchvision import datasets\n",
    "from torchvision.transforms import ToTensor\n",
    "\n",
    "# fashion_mnist图像分类数据集\n",
    "train_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "test_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "# torchvision 数据集里没有提供训练集和验证集的划分\n",
    "# 当然也可以用 torch.utils.data.Dataset 实现人为划分"
   ],
   "outputs": [],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.881857Z",
     "start_time": "2025-01-16T13:31:57.877522Z"
    }
   },
   "cell_type": "code",
   "source": "type(train_ds)",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torchvision.datasets.mnist.FashionMNIST"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 21
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.893454Z",
     "start_time": "2025-01-16T13:31:57.889960Z"
    }
   },
   "source": [
    "# 从数据集到dataloader\n",
    "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)\n",
    "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
   ],
   "outputs": [],
   "execution_count": 22
  },
  {
   "cell_type": "code",
   "source": [
    "# 查看数据\n",
    "for datas, labels in train_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break\n",
    "#查看val_loader\n",
    "for datas, labels in val_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.931475Z",
     "start_time": "2025-01-16T13:31:57.913960Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n",
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n"
     ]
    }
   ],
   "execution_count": 23
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:57.982316Z",
     "start_time": "2025-01-16T13:31:57.973903Z"
    }
   },
   "source": [
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.linear_relu_stack = nn.Sequential(\n",
    "            nn.Linear(28 * 28, 300),  # in_features=784, out_features=300\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(300, 100),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(100, 10),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        # x.shape [batch size, 1, 28, 28]\n",
    "        x = self.flatten(x)  \n",
    "        # 展平后 x.shape [batch size, 28 * 28]\n",
    "        logits = self.linear_relu_stack(x)\n",
    "        # logits.shape [batch size, 10]\n",
    "        return logits\n",
    "    \n",
    "model = NeuralNetwork()"
   ],
   "outputs": [],
   "execution_count": 24
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:31:58.025181Z",
     "start_time": "2025-01-16T13:31:58.018841Z"
    }
   },
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        #datas.shape [batch size, 1, 28, 28]\n",
    "        #labels.shape [batch size]\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item()) # tensor.item() 获取tensor的数值，loss是只有一个元素的tensor\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测, axis=-1 表示最后一个维度,因为logits.shape [batch size, 10]，所以axis=-1表示对最后一个维度求argmax，即对每个样本的10个类别的概率求argmax，得到最大概率的类别, preds.shape [batch size]\n",
    "        pred_list.extend(preds.cpu().numpy().tolist()) # tensor转numpy，再转list\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list) # 验证集准确率\n",
    "    return np.mean(loss_list), acc # 返回验证集平均损失和准确率\n"
   ],
   "outputs": [],
   "execution_count": 25
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TensorBoard 可视化\n",
    "\n",
    "pip install tensorboard\n",
    "训练过程中可以使用如下命令启动tensorboard服务。注意使用绝对路径，否则会报错\n",
    "\n",
    "```shell\n",
    " tensorboard  --logdir=\"D:\\DailyCodeAndNote\\day20\\runs\" --host 0.0.0.0 --port 8848\n",
    "```"
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "在命令行where tensorboard才可以用"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:00.359288Z",
     "start_time": "2025-01-16T13:32:00.351891Z"
    }
   },
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
    "\n",
    "    def draw_model(self, model, input_shape):#graphs\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape)) # 画模型图\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            ) # 画loss曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        ) # 画acc曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "        ) # 画lr曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss,把loss，val_loss取掉，画loss曲线\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss) # 画loss曲线\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc) # 画acc曲线\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate) # 画lr曲线\n"
   ],
   "outputs": [],
   "execution_count": 26
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:04.174051Z",
     "start_time": "2025-01-16T13:32:04.167547Z"
    }
   },
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=500, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir # 保存路径\n",
    "        self.save_step = save_step # 保存步数\n",
    "        self.save_best_only = save_best_only # 是否只保存最好的模型\n",
    "        self.best_metrics = -1 # 最好的指标，指标不可能为负数，所以初始化为-1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir): # 如果不存在保存路径，则创建\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0: #每隔save_step步保存一次\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None # 必须传入metric\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\")) # 保存最好的模型，覆盖之前的模型，不保存step，只保存state_dict，即模型参数，不保存优化器参数\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\")) # 保存每个step的模型，不覆盖之前的模型，保存step，保存state_dict，即模型参数，不保存优化器参数\n",
    "\n"
   ],
   "outputs": [],
   "execution_count": 27
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:06.479801Z",
     "start_time": "2025-01-16T13:32:06.474911Z"
    }
   },
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience # 多少个step没有提升就停止训练，此时认为即将过拟合\n",
    "        self.min_delta = min_delta # 最小的提升幅度,就是准确率，\n",
    "        self.best_metric = -1   # 最好的指标，指标不可能为负数，所以初始化为-1，此时指标即为准确率\n",
    "        self.counter = 0 # 计数器，记录多少个step没有提升\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:#用准确率\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1 # 计数器加1，下面的patience判断用到\n",
    "            \n",
    "    @property #使用@property装饰器，使得 对象.early_stop可以调用，不需要()\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "outputs": [],
   "execution_count": 28
  },
  {
   "cell_type": "code",
   "source": [
    "500*32*5"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:08.563081Z",
     "start_time": "2025-01-16T13:32:08.558760Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80000"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 29
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:13.517672Z",
     "start_time": "2025-01-16T13:32:13.511245Z"
    }
   },
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device) # 数据放到device上\n",
    "                labels = labels.to(device) # 标签放到device上\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传，计算梯度，更新参数，这里是更新模型参数\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()  # 切换到验证集模式\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train() # 切换回训练集模式\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"], # 取出当前学习率\n",
    "                            )\n",
    "                    \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc) # 保存最好的模型，覆盖之前的模型，保存step，保存state_dict,通过metric判断是否保存最好的模型\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc) # 验证集准确率不再提升，则停止训练\n",
    "                        if early_stop_callback.early_stop:# 验证集准确率不再提升，则停止训练\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict"
   ],
   "outputs": [],
   "execution_count": 30
  },
  {
   "cell_type": "code",
   "source": [
    "epoch = 100\n",
    "\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 1. 定义损失函数 采用MSE损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用SGD\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)\n",
    "\n",
    "# # 1. tensorboard 可视化\n",
    "tensorboard_callback = TensorBoardCallback(\"runs\")\n",
    "tensorboard_callback.draw_model(model, [1, 28, 28])\n",
    "# 2. save best\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints\", save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:16.729939Z",
     "start_time": "2025-01-16T13:32:16.628050Z"
    }
   },
   "outputs": [],
   "execution_count": 31
  },
  {
   "cell_type": "code",
   "source": [
    "list(model.parameters())[1] #可学习的模型参数"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:21.053805Z",
     "start_time": "2025-01-16T13:32:21.046312Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([ 1.9558e-02,  7.1895e-03,  2.7479e-03, -6.6071e-03, -2.4295e-02,\n",
       "         2.8630e-02,  1.6794e-02,  3.2655e-02,  3.9072e-03, -7.6968e-03,\n",
       "         2.3426e-02, -2.0332e-02, -8.6510e-03,  2.7760e-02,  3.4457e-02,\n",
       "         1.2187e-03, -2.7163e-02,  5.1774e-05,  1.6814e-02,  1.0753e-02,\n",
       "         3.0142e-02, -1.7567e-03,  2.4058e-02, -3.0901e-02,  6.8076e-03,\n",
       "         3.2071e-02, -2.3051e-02,  6.3447e-03, -2.6825e-02,  2.2358e-03,\n",
       "        -3.4566e-02,  8.8955e-03,  2.4871e-02, -5.1716e-04,  2.9612e-02,\n",
       "        -1.6307e-02, -1.4100e-02,  1.7288e-02, -2.2678e-02,  1.7823e-02,\n",
       "        -2.4876e-02,  2.1541e-02,  2.6327e-02, -2.2805e-02,  1.8769e-02,\n",
       "         3.2858e-02,  2.5718e-02, -3.2043e-02,  2.5321e-02, -8.0857e-03,\n",
       "         3.1119e-02, -2.9893e-02,  2.7086e-02, -2.7648e-02,  1.6973e-02,\n",
       "         9.0120e-03,  1.0980e-02, -2.7299e-03, -8.3293e-03,  3.5046e-03,\n",
       "         8.1016e-03, -8.2998e-03, -1.8016e-02, -2.2807e-02,  2.7269e-03,\n",
       "         9.9421e-04,  1.6536e-02, -7.5067e-03, -3.6092e-03,  3.1227e-02,\n",
       "        -1.6712e-02,  2.7331e-02,  1.0842e-02, -1.5521e-02, -3.2510e-02,\n",
       "        -6.9718e-03,  2.2912e-02,  2.4899e-02, -3.5315e-02,  1.5869e-02,\n",
       "        -1.6492e-02,  2.3519e-02, -1.9815e-02, -9.0930e-03,  9.2833e-03,\n",
       "         2.8720e-02,  1.2838e-02,  2.8132e-02, -8.5228e-03, -3.0884e-02,\n",
       "         1.3849e-02, -2.2501e-02, -2.5074e-02,  3.3721e-02,  2.8715e-02,\n",
       "        -2.2726e-02,  1.8365e-02,  3.0064e-02,  3.0719e-02,  3.3663e-02,\n",
       "         1.1547e-02, -1.3947e-02,  3.3200e-02, -9.5552e-03,  4.6881e-03,\n",
       "        -1.1637e-02,  2.0684e-02, -1.1823e-02,  6.6266e-03, -3.5911e-03,\n",
       "         3.2622e-02, -2.7769e-02, -1.7834e-02,  1.0282e-02,  2.3650e-02,\n",
       "         1.9715e-02, -3.0119e-02, -2.8218e-02, -1.0675e-02,  5.3401e-03,\n",
       "         2.5471e-02, -1.3122e-02, -2.7775e-03, -1.0160e-02, -1.4968e-02,\n",
       "         1.7817e-02, -2.3371e-02, -1.3123e-02,  1.0609e-02, -1.3830e-02,\n",
       "         1.5682e-02,  1.7126e-02,  2.2722e-02, -3.5208e-02, -2.4781e-02,\n",
       "         9.9128e-03,  9.7333e-03, -5.8395e-03, -1.5888e-02, -5.8502e-03,\n",
       "        -3.0156e-02,  2.4493e-02, -2.9195e-02,  4.4348e-03,  1.9029e-02,\n",
       "         1.8221e-02, -1.7698e-02, -2.0663e-02,  2.9076e-02, -2.5791e-02,\n",
       "         3.8907e-03, -1.9024e-02,  1.0747e-04,  7.9252e-03,  3.4729e-02,\n",
       "        -1.8106e-02, -6.5142e-03, -2.8842e-02, -1.7868e-02, -1.5118e-02,\n",
       "        -3.4650e-02,  2.1076e-02,  1.6385e-02, -3.4605e-02, -2.9010e-04,\n",
       "         2.9175e-02,  1.5105e-02,  5.1297e-03, -3.0925e-02, -3.5694e-02,\n",
       "         2.6464e-02, -2.6190e-02,  3.5231e-02, -7.0854e-03,  7.9417e-03,\n",
       "         1.2966e-02,  2.6694e-02,  1.2255e-02,  3.0196e-02, -3.2092e-02,\n",
       "        -1.8463e-02, -1.0113e-03,  1.8448e-02, -2.5052e-02, -3.9745e-03,\n",
       "         2.6117e-02, -1.3850e-02,  6.1893e-03, -8.1421e-03,  1.4422e-02,\n",
       "        -3.3916e-02,  9.2365e-03,  2.0753e-02,  2.2625e-02,  1.0388e-02,\n",
       "        -3.2786e-02,  2.5014e-02, -1.5667e-02, -2.0332e-02,  1.8370e-02,\n",
       "         2.2082e-02, -1.1937e-02,  1.8349e-02, -1.7947e-02, -2.7239e-02,\n",
       "        -4.0544e-03,  2.4631e-03, -5.9219e-03,  2.5800e-02,  3.5068e-02,\n",
       "        -8.0923e-03, -2.6802e-02,  1.1762e-02, -8.8069e-03, -1.2586e-03,\n",
       "         2.6188e-02, -1.2152e-02,  2.2697e-02,  2.0828e-03,  8.7528e-03,\n",
       "         1.8567e-02, -3.1836e-02,  7.7587e-03,  1.0837e-02, -7.2344e-04,\n",
       "        -1.7807e-02, -2.9659e-02, -1.7597e-02, -1.3278e-03, -1.4117e-02,\n",
       "         7.4781e-03,  2.9639e-02,  3.0003e-02,  4.8178e-04,  7.8436e-03,\n",
       "         2.4175e-02,  8.4628e-03,  2.1088e-02, -5.7893e-03,  3.3712e-02,\n",
       "         2.8963e-02, -3.0101e-02,  2.3153e-02,  1.3331e-02,  2.9548e-02,\n",
       "        -1.6188e-02,  8.5064e-03,  3.1100e-02, -2.8927e-03,  7.4613e-03,\n",
       "         6.2587e-03, -3.1037e-02, -2.0670e-03, -3.1697e-02,  3.1687e-02,\n",
       "         1.7680e-03, -1.2697e-03,  3.8576e-03, -2.8282e-02, -8.6824e-04,\n",
       "        -1.9281e-02,  1.6524e-02,  3.7932e-03,  3.3250e-02, -1.8783e-02,\n",
       "        -3.0173e-02, -7.0484e-03,  1.3971e-02,  3.3914e-02, -3.1277e-02,\n",
       "         2.4361e-02,  2.1632e-02,  1.5145e-02, -2.3847e-02,  1.8511e-02,\n",
       "        -1.7919e-02,  3.4856e-03, -1.3572e-02, -2.6644e-02,  5.4524e-03,\n",
       "        -2.7324e-02, -3.5400e-02, -2.7923e-02, -1.0921e-02, -1.9356e-02,\n",
       "        -3.9821e-03,  4.7483e-04,  7.0018e-03,  3.1314e-02, -1.6674e-02,\n",
       "        -2.6601e-02,  3.7341e-03, -7.0109e-03,  1.6741e-02, -1.5391e-02,\n",
       "         1.5505e-02,  2.2367e-02, -2.2536e-02, -1.2107e-02,  5.7621e-04],\n",
       "       requires_grad=True)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 32
  },
  {
   "cell_type": "code",
   "source": "model.state_dict().keys() #模型参数名字",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:32:23.132070Z",
     "start_time": "2025-01-16T13:32:23.126953Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "odict_keys(['linear_relu_stack.0.weight', 'linear_relu_stack.0.bias', 'linear_relu_stack.2.weight', 'linear_relu_stack.2.bias', 'linear_relu_stack.4.weight', 'linear_relu_stack.4.bias'])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 33
  },
  {
   "cell_type": "code",
   "source": [
    "model = model.to(device) # 放到device上\n",
    "record = training(\n",
    "    model,\n",
    "    train_loader,\n",
    "    val_loader,\n",
    "    epoch,\n",
    "    loss_fct,\n",
    "    optimizer,\n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=1000\n",
    "    )\n",
    "#没有进度条，是因为pycharm本身jupyter的问题"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:37:43.014863Z",
     "start_time": "2025-01-16T13:32:36.973745Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/187500 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "ef1af20165a84504a3c2445355dbdb40"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Early stop at epoch 21 / global_step 40000\n"
     ]
    }
   ],
   "execution_count": 34
  },
  {
   "cell_type": "code",
   "source": [
    "#帮我写个enumerate例子\n",
    "for i, item in enumerate([\"a\", \"b\", \"c\"]):\n",
    "    print(i, item)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:38:02.559727Z",
     "start_time": "2025-01-16T13:38:02.555767Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 a\n",
      "1 b\n",
      "2 c\n"
     ]
    }
   ],
   "execution_count": 35
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:38:04.470849Z",
     "start_time": "2025-01-16T13:38:04.424288Z"
    }
   },
   "cell_type": "code",
   "source": "record",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'train': [{'loss': 2.303466558456421, 'acc': 0.125, 'step': 0},\n",
       "  {'loss': 2.3033382892608643, 'acc': 0.1875, 'step': 1},\n",
       "  {'loss': 2.3071892261505127, 'acc': 0.09375, 'step': 2},\n",
       "  {'loss': 2.3218600749969482, 'acc': 0.0625, 'step': 3},\n",
       "  {'loss': 2.288614273071289, 'acc': 0.15625, 'step': 4},\n",
       "  {'loss': 2.3187308311462402, 'acc': 0.0625, 'step': 5},\n",
       "  {'loss': 2.287360668182373, 'acc': 0.125, 'step': 6},\n",
       "  {'loss': 2.314068078994751, 'acc': 0.03125, 'step': 7},\n",
       "  {'loss': 2.308727741241455, 'acc': 0.03125, 'step': 8},\n",
       "  {'loss': 2.3042895793914795, 'acc': 0.0625, 'step': 9},\n",
       "  {'loss': 2.3128809928894043, 'acc': 0.09375, 'step': 10},\n",
       "  {'loss': 2.296146869659424, 'acc': 0.125, 'step': 11},\n",
       "  {'loss': 2.301633834838867, 'acc': 0.125, 'step': 12},\n",
       "  {'loss': 2.287337064743042, 'acc': 0.09375, 'step': 13},\n",
       "  {'loss': 2.30136775970459, 'acc': 0.0625, 'step': 14},\n",
       "  {'loss': 2.294708013534546, 'acc': 0.0625, 'step': 15},\n",
       "  {'loss': 2.2774007320404053, 'acc': 0.15625, 'step': 16},\n",
       "  {'loss': 2.270564079284668, 'acc': 0.1875, 'step': 17},\n",
       "  {'loss': 2.2942283153533936, 'acc': 0.0, 'step': 18},\n",
       "  {'loss': 2.2887234687805176, 'acc': 0.15625, 'step': 19},\n",
       "  {'loss': 2.3059706687927246, 'acc': 0.0625, 'step': 20},\n",
       "  {'loss': 2.2957422733306885, 'acc': 0.03125, 'step': 21},\n",
       "  {'loss': 2.2804629802703857, 'acc': 0.125, 'step': 22},\n",
       "  {'loss': 2.272390365600586, 'acc': 0.15625, 'step': 23},\n",
       "  {'loss': 2.3023858070373535, 'acc': 0.0625, 'step': 24},\n",
       "  {'loss': 2.2772817611694336, 'acc': 0.15625, 'step': 25},\n",
       "  {'loss': 2.2695202827453613, 'acc': 0.125, 'step': 26},\n",
       "  {'loss': 2.2735986709594727, 'acc': 0.15625, 'step': 27},\n",
       "  {'loss': 2.2878663539886475, 'acc': 0.0625, 'step': 28},\n",
       "  {'loss': 2.274379014968872, 'acc': 0.15625, 'step': 29},\n",
       "  {'loss': 2.268610715866089, 'acc': 0.09375, 'step': 30},\n",
       "  {'loss': 2.282191514968872, 'acc': 0.09375, 'step': 31},\n",
       "  {'loss': 2.290956735610962, 'acc': 0.03125, 'step': 32},\n",
       "  {'loss': 2.2869884967803955, 'acc': 0.125, 'step': 33},\n",
       "  {'loss': 2.2785232067108154, 'acc': 0.09375, 'step': 34},\n",
       "  {'loss': 2.2495527267456055, 'acc': 0.28125, 'step': 35},\n",
       "  {'loss': 2.2669148445129395, 'acc': 0.1875, 'step': 36},\n",
       "  {'loss': 2.2714109420776367, 'acc': 0.125, 'step': 37},\n",
       "  {'loss': 2.258575916290283, 'acc': 0.21875, 'step': 38},\n",
       "  {'loss': 2.2590298652648926, 'acc': 0.1875, 'step': 39},\n",
       "  {'loss': 2.2664175033569336, 'acc': 0.125, 'step': 40},\n",
       "  {'loss': 2.2467689514160156, 'acc': 0.25, 'step': 41},\n",
       "  {'loss': 2.255383253097534, 'acc': 0.21875, 'step': 42},\n",
       "  {'loss': 2.2748050689697266, 'acc': 0.15625, 'step': 43},\n",
       "  {'loss': 2.2607898712158203, 'acc': 0.15625, 'step': 44},\n",
       "  {'loss': 2.2864813804626465, 'acc': 0.09375, 'step': 45},\n",
       "  {'loss': 2.2661798000335693, 'acc': 0.1875, 'step': 46},\n",
       "  {'loss': 2.277808904647827, 'acc': 0.15625, 'step': 47},\n",
       "  {'loss': 2.254425525665283, 'acc': 0.21875, 'step': 48},\n",
       "  {'loss': 2.2591359615325928, 'acc': 0.1875, 'step': 49},\n",
       "  {'loss': 2.244084358215332, 'acc': 0.1875, 'step': 50},\n",
       "  {'loss': 2.227423667907715, 'acc': 0.25, 'step': 51},\n",
       "  {'loss': 2.2390968799591064, 'acc': 0.28125, 'step': 52},\n",
       "  {'loss': 2.216606378555298, 'acc': 0.375, 'step': 53},\n",
       "  {'loss': 2.2536001205444336, 'acc': 0.1875, 'step': 54},\n",
       "  {'loss': 2.2445757389068604, 'acc': 0.21875, 'step': 55},\n",
       "  {'loss': 2.244523286819458, 'acc': 0.125, 'step': 56},\n",
       "  {'loss': 2.244736909866333, 'acc': 0.1875, 'step': 57},\n",
       "  {'loss': 2.2518749237060547, 'acc': 0.21875, 'step': 58},\n",
       "  {'loss': 2.2529168128967285, 'acc': 0.125, 'step': 59},\n",
       "  {'loss': 2.243809461593628, 'acc': 0.1875, 'step': 60},\n",
       "  {'loss': 2.252359390258789, 'acc': 0.09375, 'step': 61},\n",
       "  {'loss': 2.2396140098571777, 'acc': 0.1875, 'step': 62},\n",
       "  {'loss': 2.2373900413513184, 'acc': 0.1875, 'step': 63},\n",
       "  {'loss': 2.254608154296875, 'acc': 0.125, 'step': 64},\n",
       "  {'loss': 2.234482765197754, 'acc': 0.15625, 'step': 65},\n",
       "  {'loss': 2.2553484439849854, 'acc': 0.125, 'step': 66},\n",
       "  {'loss': 2.220672845840454, 'acc': 0.25, 'step': 67},\n",
       "  {'loss': 2.251511335372925, 'acc': 0.125, 'step': 68},\n",
       "  {'loss': 2.2580313682556152, 'acc': 0.15625, 'step': 69},\n",
       "  {'loss': 2.207589626312256, 'acc': 0.1875, 'step': 70},\n",
       "  {'loss': 2.252397298812866, 'acc': 0.03125, 'step': 71},\n",
       "  {'loss': 2.2330455780029297, 'acc': 0.15625, 'step': 72},\n",
       "  {'loss': 2.231208324432373, 'acc': 0.15625, 'step': 73},\n",
       "  {'loss': 2.2306463718414307, 'acc': 0.125, 'step': 74},\n",
       "  {'loss': 2.220284938812256, 'acc': 0.3125, 'step': 75},\n",
       "  {'loss': 2.2352511882781982, 'acc': 0.1875, 'step': 76},\n",
       "  {'loss': 2.2331526279449463, 'acc': 0.125, 'step': 77},\n",
       "  {'loss': 2.2145049571990967, 'acc': 0.25, 'step': 78},\n",
       "  {'loss': 2.2455103397369385, 'acc': 0.09375, 'step': 79},\n",
       "  {'loss': 2.2490522861480713, 'acc': 0.125, 'step': 80},\n",
       "  {'loss': 2.2229552268981934, 'acc': 0.21875, 'step': 81},\n",
       "  {'loss': 2.2291669845581055, 'acc': 0.1875, 'step': 82},\n",
       "  {'loss': 2.218944787979126, 'acc': 0.15625, 'step': 83},\n",
       "  {'loss': 2.2058024406433105, 'acc': 0.21875, 'step': 84},\n",
       "  {'loss': 2.2225117683410645, 'acc': 0.21875, 'step': 85},\n",
       "  {'loss': 2.1982758045196533, 'acc': 0.25, 'step': 86},\n",
       "  {'loss': 2.2215676307678223, 'acc': 0.25, 'step': 87},\n",
       "  {'loss': 2.199254274368286, 'acc': 0.25, 'step': 88},\n",
       "  {'loss': 2.201641082763672, 'acc': 0.25, 'step': 89},\n",
       "  {'loss': 2.223297119140625, 'acc': 0.15625, 'step': 90},\n",
       "  {'loss': 2.2112860679626465, 'acc': 0.21875, 'step': 91},\n",
       "  {'loss': 2.20102858543396, 'acc': 0.1875, 'step': 92},\n",
       "  {'loss': 2.2024452686309814, 'acc': 0.15625, 'step': 93},\n",
       "  {'loss': 2.1973063945770264, 'acc': 0.1875, 'step': 94},\n",
       "  {'loss': 2.1913182735443115, 'acc': 0.125, 'step': 95},\n",
       "  {'loss': 2.2010602951049805, 'acc': 0.15625, 'step': 96},\n",
       "  {'loss': 2.215219497680664, 'acc': 0.125, 'step': 97},\n",
       "  {'loss': 2.207102060317993, 'acc': 0.09375, 'step': 98},\n",
       "  {'loss': 2.18353271484375, 'acc': 0.25, 'step': 99},\n",
       "  {'loss': 2.2104361057281494, 'acc': 0.25, 'step': 100},\n",
       "  {'loss': 2.2021615505218506, 'acc': 0.1875, 'step': 101},\n",
       "  {'loss': 2.2049105167388916, 'acc': 0.21875, 'step': 102},\n",
       "  {'loss': 2.1932644844055176, 'acc': 0.15625, 'step': 103},\n",
       "  {'loss': 2.204683303833008, 'acc': 0.21875, 'step': 104},\n",
       "  {'loss': 2.1822075843811035, 'acc': 0.28125, 'step': 105},\n",
       "  {'loss': 2.1871912479400635, 'acc': 0.21875, 'step': 106},\n",
       "  {'loss': 2.1720690727233887, 'acc': 0.40625, 'step': 107},\n",
       "  {'loss': 2.1936497688293457, 'acc': 0.15625, 'step': 108},\n",
       "  {'loss': 2.150031566619873, 'acc': 0.34375, 'step': 109},\n",
       "  {'loss': 2.1954567432403564, 'acc': 0.25, 'step': 110},\n",
       "  {'loss': 2.168543577194214, 'acc': 0.21875, 'step': 111},\n",
       "  {'loss': 2.187413454055786, 'acc': 0.15625, 'step': 112},\n",
       "  {'loss': 2.202592611312866, 'acc': 0.15625, 'step': 113},\n",
       "  {'loss': 2.211019515991211, 'acc': 0.09375, 'step': 114},\n",
       "  {'loss': 2.178169012069702, 'acc': 0.21875, 'step': 115},\n",
       "  {'loss': 2.1740832328796387, 'acc': 0.375, 'step': 116},\n",
       "  {'loss': 2.181692123413086, 'acc': 0.1875, 'step': 117},\n",
       "  {'loss': 2.15208101272583, 'acc': 0.1875, 'step': 118},\n",
       "  {'loss': 2.181501865386963, 'acc': 0.21875, 'step': 119},\n",
       "  {'loss': 2.1899735927581787, 'acc': 0.15625, 'step': 120},\n",
       "  {'loss': 2.1753809452056885, 'acc': 0.15625, 'step': 121},\n",
       "  {'loss': 2.1836555004119873, 'acc': 0.125, 'step': 122},\n",
       "  {'loss': 2.150949001312256, 'acc': 0.25, 'step': 123},\n",
       "  {'loss': 2.179720401763916, 'acc': 0.09375, 'step': 124},\n",
       "  {'loss': 2.14320969581604, 'acc': 0.40625, 'step': 125},\n",
       "  {'loss': 2.160956859588623, 'acc': 0.1875, 'step': 126},\n",
       "  {'loss': 2.1685638427734375, 'acc': 0.25, 'step': 127},\n",
       "  {'loss': 2.1427226066589355, 'acc': 0.21875, 'step': 128},\n",
       "  {'loss': 2.15384578704834, 'acc': 0.25, 'step': 129},\n",
       "  {'loss': 2.1432840824127197, 'acc': 0.375, 'step': 130},\n",
       "  {'loss': 2.159295082092285, 'acc': 0.28125, 'step': 131},\n",
       "  {'loss': 2.171252965927124, 'acc': 0.28125, 'step': 132},\n",
       "  {'loss': 2.119903802871704, 'acc': 0.5, 'step': 133},\n",
       "  {'loss': 2.127018451690674, 'acc': 0.34375, 'step': 134},\n",
       "  {'loss': 2.1412510871887207, 'acc': 0.25, 'step': 135},\n",
       "  {'loss': 2.1589479446411133, 'acc': 0.28125, 'step': 136},\n",
       "  {'loss': 2.1046252250671387, 'acc': 0.40625, 'step': 137},\n",
       "  {'loss': 2.1449296474456787, 'acc': 0.34375, 'step': 138},\n",
       "  {'loss': 2.1284332275390625, 'acc': 0.3125, 'step': 139},\n",
       "  {'loss': 2.1351428031921387, 'acc': 0.34375, 'step': 140},\n",
       "  {'loss': 2.1307454109191895, 'acc': 0.34375, 'step': 141},\n",
       "  {'loss': 2.1129305362701416, 'acc': 0.375, 'step': 142},\n",
       "  {'loss': 2.096128463745117, 'acc': 0.5, 'step': 143},\n",
       "  {'loss': 2.1148431301116943, 'acc': 0.3125, 'step': 144},\n",
       "  {'loss': 2.1239216327667236, 'acc': 0.3125, 'step': 145},\n",
       "  {'loss': 2.1180002689361572, 'acc': 0.4375, 'step': 146},\n",
       "  {'loss': 2.10441517829895, 'acc': 0.28125, 'step': 147},\n",
       "  {'loss': 2.0999560356140137, 'acc': 0.375, 'step': 148},\n",
       "  {'loss': 2.1281580924987793, 'acc': 0.28125, 'step': 149},\n",
       "  {'loss': 2.1151559352874756, 'acc': 0.375, 'step': 150},\n",
       "  {'loss': 2.114875555038452, 'acc': 0.125, 'step': 151},\n",
       "  {'loss': 2.0896646976470947, 'acc': 0.375, 'step': 152},\n",
       "  {'loss': 2.1194446086883545, 'acc': 0.3125, 'step': 153},\n",
       "  {'loss': 2.09270977973938, 'acc': 0.28125, 'step': 154},\n",
       "  {'loss': 2.1188695430755615, 'acc': 0.28125, 'step': 155},\n",
       "  {'loss': 2.0815978050231934, 'acc': 0.25, 'step': 156},\n",
       "  {'loss': 2.120070695877075, 'acc': 0.3125, 'step': 157},\n",
       "  {'loss': 2.085339307785034, 'acc': 0.3125, 'step': 158},\n",
       "  {'loss': 2.0762484073638916, 'acc': 0.3125, 'step': 159},\n",
       "  {'loss': 2.110511302947998, 'acc': 0.3125, 'step': 160},\n",
       "  {'loss': 2.115053415298462, 'acc': 0.28125, 'step': 161},\n",
       "  {'loss': 2.0717179775238037, 'acc': 0.4375, 'step': 162},\n",
       "  {'loss': 2.059377670288086, 'acc': 0.46875, 'step': 163},\n",
       "  {'loss': 2.041195869445801, 'acc': 0.59375, 'step': 164},\n",
       "  {'loss': 2.075763463973999, 'acc': 0.5, 'step': 165},\n",
       "  {'loss': 2.106421709060669, 'acc': 0.21875, 'step': 166},\n",
       "  {'loss': 2.090693712234497, 'acc': 0.375, 'step': 167},\n",
       "  {'loss': 2.088669538497925, 'acc': 0.21875, 'step': 168},\n",
       "  {'loss': 2.0713512897491455, 'acc': 0.4375, 'step': 169},\n",
       "  {'loss': 2.08390474319458, 'acc': 0.4375, 'step': 170},\n",
       "  {'loss': 2.0575191974639893, 'acc': 0.40625, 'step': 171},\n",
       "  {'loss': 2.086629867553711, 'acc': 0.375, 'step': 172},\n",
       "  {'loss': 2.0545694828033447, 'acc': 0.46875, 'step': 173},\n",
       "  {'loss': 2.0697903633117676, 'acc': 0.46875, 'step': 174},\n",
       "  {'loss': 2.0747721195220947, 'acc': 0.34375, 'step': 175},\n",
       "  {'loss': 2.0449180603027344, 'acc': 0.40625, 'step': 176},\n",
       "  {'loss': 2.036757469177246, 'acc': 0.28125, 'step': 177},\n",
       "  {'loss': 2.055678367614746, 'acc': 0.375, 'step': 178},\n",
       "  {'loss': 2.054741621017456, 'acc': 0.3125, 'step': 179},\n",
       "  {'loss': 2.0333330631256104, 'acc': 0.46875, 'step': 180},\n",
       "  {'loss': 2.086120367050171, 'acc': 0.25, 'step': 181},\n",
       "  {'loss': 2.043607711791992, 'acc': 0.4375, 'step': 182},\n",
       "  {'loss': 2.0310699939727783, 'acc': 0.375, 'step': 183},\n",
       "  {'loss': 2.0297675132751465, 'acc': 0.46875, 'step': 184},\n",
       "  {'loss': 2.059352159500122, 'acc': 0.5, 'step': 185},\n",
       "  {'loss': 2.056046962738037, 'acc': 0.3125, 'step': 186},\n",
       "  {'loss': 2.0541529655456543, 'acc': 0.25, 'step': 187},\n",
       "  {'loss': 2.0186941623687744, 'acc': 0.53125, 'step': 188},\n",
       "  {'loss': 2.064500093460083, 'acc': 0.375, 'step': 189},\n",
       "  {'loss': 2.040602207183838, 'acc': 0.34375, 'step': 190},\n",
       "  {'loss': 1.990680456161499, 'acc': 0.40625, 'step': 191},\n",
       "  {'loss': 2.046175003051758, 'acc': 0.5, 'step': 192},\n",
       "  {'loss': 2.0326297283172607, 'acc': 0.4375, 'step': 193},\n",
       "  {'loss': 1.9943674802780151, 'acc': 0.53125, 'step': 194},\n",
       "  {'loss': 2.013660192489624, 'acc': 0.40625, 'step': 195},\n",
       "  {'loss': 1.9790040254592896, 'acc': 0.59375, 'step': 196},\n",
       "  {'loss': 1.9818373918533325, 'acc': 0.40625, 'step': 197},\n",
       "  {'loss': 1.985634684562683, 'acc': 0.5625, 'step': 198},\n",
       "  {'loss': 2.0116679668426514, 'acc': 0.375, 'step': 199},\n",
       "  {'loss': 1.967429757118225, 'acc': 0.53125, 'step': 200},\n",
       "  {'loss': 1.9891622066497803, 'acc': 0.53125, 'step': 201},\n",
       "  {'loss': 1.9507291316986084, 'acc': 0.625, 'step': 202},\n",
       "  {'loss': 1.944382667541504, 'acc': 0.59375, 'step': 203},\n",
       "  {'loss': 1.9727059602737427, 'acc': 0.65625, 'step': 204},\n",
       "  {'loss': 1.980758786201477, 'acc': 0.5625, 'step': 205},\n",
       "  {'loss': 2.0126378536224365, 'acc': 0.53125, 'step': 206},\n",
       "  {'loss': 1.9632781744003296, 'acc': 0.59375, 'step': 207},\n",
       "  {'loss': 1.9737017154693604, 'acc': 0.46875, 'step': 208},\n",
       "  {'loss': 1.9844385385513306, 'acc': 0.4375, 'step': 209},\n",
       "  {'loss': 1.9850175380706787, 'acc': 0.5, 'step': 210},\n",
       "  {'loss': 1.9470692873001099, 'acc': 0.5, 'step': 211},\n",
       "  {'loss': 1.9525187015533447, 'acc': 0.5625, 'step': 212},\n",
       "  {'loss': 1.9747387170791626, 'acc': 0.5, 'step': 213},\n",
       "  {'loss': 1.9143388271331787, 'acc': 0.78125, 'step': 214},\n",
       "  {'loss': 1.9477585554122925, 'acc': 0.625, 'step': 215},\n",
       "  {'loss': 2.0044288635253906, 'acc': 0.46875, 'step': 216},\n",
       "  {'loss': 1.945699691772461, 'acc': 0.75, 'step': 217},\n",
       "  {'loss': 1.9590238332748413, 'acc': 0.59375, 'step': 218},\n",
       "  {'loss': 1.9560322761535645, 'acc': 0.46875, 'step': 219},\n",
       "  {'loss': 1.9896219968795776, 'acc': 0.5625, 'step': 220},\n",
       "  {'loss': 1.943535327911377, 'acc': 0.5, 'step': 221},\n",
       "  {'loss': 1.927886724472046, 'acc': 0.65625, 'step': 222},\n",
       "  {'loss': 1.9267204999923706, 'acc': 0.5625, 'step': 223},\n",
       "  {'loss': 1.9074167013168335, 'acc': 0.53125, 'step': 224},\n",
       "  {'loss': 1.9777557849884033, 'acc': 0.59375, 'step': 225},\n",
       "  {'loss': 1.9292209148406982, 'acc': 0.5625, 'step': 226},\n",
       "  {'loss': 1.843108892440796, 'acc': 0.75, 'step': 227},\n",
       "  {'loss': 1.9347964525222778, 'acc': 0.59375, 'step': 228},\n",
       "  {'loss': 1.8738770484924316, 'acc': 0.71875, 'step': 229},\n",
       "  {'loss': 1.9096508026123047, 'acc': 0.5625, 'step': 230},\n",
       "  {'loss': 1.8531134128570557, 'acc': 0.53125, 'step': 231},\n",
       "  {'loss': 1.8701450824737549, 'acc': 0.65625, 'step': 232},\n",
       "  {'loss': 1.890529990196228, 'acc': 0.5625, 'step': 233},\n",
       "  {'loss': 1.8783291578292847, 'acc': 0.53125, 'step': 234},\n",
       "  {'loss': 1.8436015844345093, 'acc': 0.71875, 'step': 235},\n",
       "  {'loss': 1.9025157690048218, 'acc': 0.5625, 'step': 236},\n",
       "  {'loss': 1.920330286026001, 'acc': 0.46875, 'step': 237},\n",
       "  {'loss': 1.9100533723831177, 'acc': 0.5, 'step': 238},\n",
       "  {'loss': 1.8637913465499878, 'acc': 0.53125, 'step': 239},\n",
       "  {'loss': 1.8430826663970947, 'acc': 0.71875, 'step': 240},\n",
       "  {'loss': 1.8507696390151978, 'acc': 0.5, 'step': 241},\n",
       "  {'loss': 1.806099534034729, 'acc': 0.6875, 'step': 242},\n",
       "  {'loss': 1.8716973066329956, 'acc': 0.46875, 'step': 243},\n",
       "  {'loss': 1.843996286392212, 'acc': 0.625, 'step': 244},\n",
       "  {'loss': 1.8280558586120605, 'acc': 0.65625, 'step': 245},\n",
       "  {'loss': 1.88411283493042, 'acc': 0.375, 'step': 246},\n",
       "  {'loss': 1.8764580488204956, 'acc': 0.4375, 'step': 247},\n",
       "  {'loss': 1.8687340021133423, 'acc': 0.5625, 'step': 248},\n",
       "  {'loss': 1.8102940320968628, 'acc': 0.53125, 'step': 249},\n",
       "  {'loss': 1.752180814743042, 'acc': 0.78125, 'step': 250},\n",
       "  {'loss': 1.8302189111709595, 'acc': 0.46875, 'step': 251},\n",
       "  {'loss': 1.8648499250411987, 'acc': 0.53125, 'step': 252},\n",
       "  {'loss': 1.817945122718811, 'acc': 0.625, 'step': 253},\n",
       "  {'loss': 1.7770756483078003, 'acc': 0.59375, 'step': 254},\n",
       "  {'loss': 1.820480227470398, 'acc': 0.46875, 'step': 255},\n",
       "  {'loss': 1.7931067943572998, 'acc': 0.5625, 'step': 256},\n",
       "  {'loss': 1.7993415594100952, 'acc': 0.625, 'step': 257},\n",
       "  {'loss': 1.7919204235076904, 'acc': 0.65625, 'step': 258},\n",
       "  {'loss': 1.8189623355865479, 'acc': 0.53125, 'step': 259},\n",
       "  {'loss': 1.7746435403823853, 'acc': 0.6875, 'step': 260},\n",
       "  {'loss': 1.8328707218170166, 'acc': 0.59375, 'step': 261},\n",
       "  {'loss': 1.796006202697754, 'acc': 0.5625, 'step': 262},\n",
       "  {'loss': 1.7855252027511597, 'acc': 0.78125, 'step': 263},\n",
       "  {'loss': 1.787413239479065, 'acc': 0.65625, 'step': 264},\n",
       "  {'loss': 1.8010339736938477, 'acc': 0.53125, 'step': 265},\n",
       "  {'loss': 1.7782789468765259, 'acc': 0.5, 'step': 266},\n",
       "  {'loss': 1.7224472761154175, 'acc': 0.6875, 'step': 267},\n",
       "  {'loss': 1.7340236902236938, 'acc': 0.75, 'step': 268},\n",
       "  {'loss': 1.8961015939712524, 'acc': 0.3125, 'step': 269},\n",
       "  {'loss': 1.721358060836792, 'acc': 0.5, 'step': 270},\n",
       "  {'loss': 1.8429030179977417, 'acc': 0.40625, 'step': 271},\n",
       "  {'loss': 1.7347856760025024, 'acc': 0.65625, 'step': 272},\n",
       "  {'loss': 1.7277432680130005, 'acc': 0.46875, 'step': 273},\n",
       "  {'loss': 1.7422696352005005, 'acc': 0.625, 'step': 274},\n",
       "  {'loss': 1.7843701839447021, 'acc': 0.4375, 'step': 275},\n",
       "  {'loss': 1.6399855613708496, 'acc': 0.65625, 'step': 276},\n",
       "  {'loss': 1.7778233289718628, 'acc': 0.53125, 'step': 277},\n",
       "  {'loss': 1.7244412899017334, 'acc': 0.5625, 'step': 278},\n",
       "  {'loss': 1.7621779441833496, 'acc': 0.53125, 'step': 279},\n",
       "  {'loss': 1.7618719339370728, 'acc': 0.625, 'step': 280},\n",
       "  {'loss': 1.7256344556808472, 'acc': 0.46875, 'step': 281},\n",
       "  {'loss': 1.6718999147415161, 'acc': 0.59375, 'step': 282},\n",
       "  {'loss': 1.691655158996582, 'acc': 0.71875, 'step': 283},\n",
       "  {'loss': 1.7012033462524414, 'acc': 0.4375, 'step': 284},\n",
       "  {'loss': 1.7595335245132446, 'acc': 0.4375, 'step': 285},\n",
       "  {'loss': 1.7609269618988037, 'acc': 0.46875, 'step': 286},\n",
       "  {'loss': 1.6629467010498047, 'acc': 0.59375, 'step': 287},\n",
       "  {'loss': 1.703782081604004, 'acc': 0.65625, 'step': 288},\n",
       "  {'loss': 1.6466342210769653, 'acc': 0.59375, 'step': 289},\n",
       "  {'loss': 1.692423701286316, 'acc': 0.6875, 'step': 290},\n",
       "  {'loss': 1.6508809328079224, 'acc': 0.59375, 'step': 291},\n",
       "  {'loss': 1.7189795970916748, 'acc': 0.53125, 'step': 292},\n",
       "  {'loss': 1.6497652530670166, 'acc': 0.53125, 'step': 293},\n",
       "  {'loss': 1.6364878416061401, 'acc': 0.5, 'step': 294},\n",
       "  {'loss': 1.6805330514907837, 'acc': 0.59375, 'step': 295},\n",
       "  {'loss': 1.6566163301467896, 'acc': 0.59375, 'step': 296},\n",
       "  {'loss': 1.633085012435913, 'acc': 0.625, 'step': 297},\n",
       "  {'loss': 1.6528377532958984, 'acc': 0.59375, 'step': 298},\n",
       "  {'loss': 1.7004997730255127, 'acc': 0.625, 'step': 299},\n",
       "  {'loss': 1.6046591997146606, 'acc': 0.65625, 'step': 300},\n",
       "  {'loss': 1.639346718788147, 'acc': 0.53125, 'step': 301},\n",
       "  {'loss': 1.6111453771591187, 'acc': 0.6875, 'step': 302},\n",
       "  {'loss': 1.643119215965271, 'acc': 0.53125, 'step': 303},\n",
       "  {'loss': 1.6685057878494263, 'acc': 0.53125, 'step': 304},\n",
       "  {'loss': 1.6502158641815186, 'acc': 0.59375, 'step': 305},\n",
       "  {'loss': 1.5849429368972778, 'acc': 0.53125, 'step': 306},\n",
       "  {'loss': 1.5805498361587524, 'acc': 0.625, 'step': 307},\n",
       "  {'loss': 1.5009249448776245, 'acc': 0.65625, 'step': 308},\n",
       "  {'loss': 1.6316190958023071, 'acc': 0.59375, 'step': 309},\n",
       "  {'loss': 1.7159318923950195, 'acc': 0.5, 'step': 310},\n",
       "  {'loss': 1.625504970550537, 'acc': 0.59375, 'step': 311},\n",
       "  {'loss': 1.6228224039077759, 'acc': 0.5625, 'step': 312},\n",
       "  {'loss': 1.6002482175827026, 'acc': 0.4375, 'step': 313},\n",
       "  {'loss': 1.6245373487472534, 'acc': 0.59375, 'step': 314},\n",
       "  {'loss': 1.6358399391174316, 'acc': 0.53125, 'step': 315},\n",
       "  {'loss': 1.563226342201233, 'acc': 0.53125, 'step': 316},\n",
       "  {'loss': 1.534958839416504, 'acc': 0.625, 'step': 317},\n",
       "  {'loss': 1.599096417427063, 'acc': 0.5625, 'step': 318},\n",
       "  {'loss': 1.5627129077911377, 'acc': 0.625, 'step': 319},\n",
       "  {'loss': 1.5740257501602173, 'acc': 0.59375, 'step': 320},\n",
       "  {'loss': 1.5416043996810913, 'acc': 0.625, 'step': 321},\n",
       "  {'loss': 1.6257859468460083, 'acc': 0.375, 'step': 322},\n",
       "  {'loss': 1.5295811891555786, 'acc': 0.625, 'step': 323},\n",
       "  {'loss': 1.504780888557434, 'acc': 0.65625, 'step': 324},\n",
       "  {'loss': 1.6129209995269775, 'acc': 0.5625, 'step': 325},\n",
       "  {'loss': 1.574109673500061, 'acc': 0.65625, 'step': 326},\n",
       "  {'loss': 1.4878102540969849, 'acc': 0.65625, 'step': 327},\n",
       "  {'loss': 1.4978197813034058, 'acc': 0.65625, 'step': 328},\n",
       "  {'loss': 1.6161391735076904, 'acc': 0.5, 'step': 329},\n",
       "  {'loss': 1.5407298803329468, 'acc': 0.46875, 'step': 330},\n",
       "  {'loss': 1.5417237281799316, 'acc': 0.625, 'step': 331},\n",
       "  {'loss': 1.5313299894332886, 'acc': 0.65625, 'step': 332},\n",
       "  {'loss': 1.5652859210968018, 'acc': 0.6875, 'step': 333},\n",
       "  {'loss': 1.4411970376968384, 'acc': 0.71875, 'step': 334},\n",
       "  {'loss': 1.6035182476043701, 'acc': 0.46875, 'step': 335},\n",
       "  {'loss': 1.4996272325515747, 'acc': 0.65625, 'step': 336},\n",
       "  {'loss': 1.5511503219604492, 'acc': 0.65625, 'step': 337},\n",
       "  {'loss': 1.5151515007019043, 'acc': 0.5625, 'step': 338},\n",
       "  {'loss': 1.4631154537200928, 'acc': 0.71875, 'step': 339},\n",
       "  {'loss': 1.3917932510375977, 'acc': 0.65625, 'step': 340},\n",
       "  {'loss': 1.411210060119629, 'acc': 0.625, 'step': 341},\n",
       "  {'loss': 1.450715184211731, 'acc': 0.71875, 'step': 342},\n",
       "  {'loss': 1.4309004545211792, 'acc': 0.625, 'step': 343},\n",
       "  {'loss': 1.4934734106063843, 'acc': 0.46875, 'step': 344},\n",
       "  {'loss': 1.3402546644210815, 'acc': 0.71875, 'step': 345},\n",
       "  {'loss': 1.345822811126709, 'acc': 0.71875, 'step': 346},\n",
       "  {'loss': 1.4812896251678467, 'acc': 0.5, 'step': 347},\n",
       "  {'loss': 1.5183897018432617, 'acc': 0.40625, 'step': 348},\n",
       "  {'loss': 1.4391289949417114, 'acc': 0.5, 'step': 349},\n",
       "  {'loss': 1.4764349460601807, 'acc': 0.40625, 'step': 350},\n",
       "  {'loss': 1.5191175937652588, 'acc': 0.46875, 'step': 351},\n",
       "  {'loss': 1.3905519247055054, 'acc': 0.59375, 'step': 352},\n",
       "  {'loss': 1.581024169921875, 'acc': 0.4375, 'step': 353},\n",
       "  {'loss': 1.6118535995483398, 'acc': 0.40625, 'step': 354},\n",
       "  {'loss': 1.476588249206543, 'acc': 0.5, 'step': 355},\n",
       "  {'loss': 1.444122076034546, 'acc': 0.625, 'step': 356},\n",
       "  {'loss': 1.6012030839920044, 'acc': 0.5, 'step': 357},\n",
       "  {'loss': 1.5136048793792725, 'acc': 0.5, 'step': 358},\n",
       "  {'loss': 1.4456664323806763, 'acc': 0.53125, 'step': 359},\n",
       "  {'loss': 1.4547209739685059, 'acc': 0.59375, 'step': 360},\n",
       "  {'loss': 1.4546992778778076, 'acc': 0.5625, 'step': 361},\n",
       "  {'loss': 1.4536397457122803, 'acc': 0.6875, 'step': 362},\n",
       "  {'loss': 1.3827903270721436, 'acc': 0.625, 'step': 363},\n",
       "  {'loss': 1.3281490802764893, 'acc': 0.625, 'step': 364},\n",
       "  {'loss': 1.4204881191253662, 'acc': 0.71875, 'step': 365},\n",
       "  {'loss': 1.5126279592514038, 'acc': 0.46875, 'step': 366},\n",
       "  {'loss': 1.4346849918365479, 'acc': 0.65625, 'step': 367},\n",
       "  {'loss': 1.4374545812606812, 'acc': 0.5625, 'step': 368},\n",
       "  {'loss': 1.4965752363204956, 'acc': 0.5625, 'step': 369},\n",
       "  {'loss': 1.3398760557174683, 'acc': 0.71875, 'step': 370},\n",
       "  {'loss': 1.5142160654067993, 'acc': 0.625, 'step': 371},\n",
       "  {'loss': 1.2820487022399902, 'acc': 0.6875, 'step': 372},\n",
       "  {'loss': 1.5928080081939697, 'acc': 0.40625, 'step': 373},\n",
       "  {'loss': 1.4944159984588623, 'acc': 0.625, 'step': 374},\n",
       "  {'loss': 1.4333134889602661, 'acc': 0.59375, 'step': 375},\n",
       "  {'loss': 1.4673041105270386, 'acc': 0.65625, 'step': 376},\n",
       "  {'loss': 1.4722844362258911, 'acc': 0.4375, 'step': 377},\n",
       "  {'loss': 1.3896793127059937, 'acc': 0.53125, 'step': 378},\n",
       "  {'loss': 1.3387080430984497, 'acc': 0.71875, 'step': 379},\n",
       "  {'loss': 1.4488472938537598, 'acc': 0.5625, 'step': 380},\n",
       "  {'loss': 1.4330805540084839, 'acc': 0.6875, 'step': 381},\n",
       "  {'loss': 1.5189951658248901, 'acc': 0.65625, 'step': 382},\n",
       "  {'loss': 1.3001036643981934, 'acc': 0.75, 'step': 383},\n",
       "  {'loss': 1.3544483184814453, 'acc': 0.625, 'step': 384},\n",
       "  {'loss': 1.3286008834838867, 'acc': 0.71875, 'step': 385},\n",
       "  {'loss': 1.310831904411316, 'acc': 0.6875, 'step': 386},\n",
       "  {'loss': 1.5544198751449585, 'acc': 0.53125, 'step': 387},\n",
       "  {'loss': 1.2464134693145752, 'acc': 0.8125, 'step': 388},\n",
       "  {'loss': 1.4872421026229858, 'acc': 0.5625, 'step': 389},\n",
       "  {'loss': 1.3909599781036377, 'acc': 0.59375, 'step': 390},\n",
       "  {'loss': 1.3548264503479004, 'acc': 0.6875, 'step': 391},\n",
       "  {'loss': 1.2757606506347656, 'acc': 0.65625, 'step': 392},\n",
       "  {'loss': 1.2757645845413208, 'acc': 0.75, 'step': 393},\n",
       "  {'loss': 1.3139216899871826, 'acc': 0.5625, 'step': 394},\n",
       "  {'loss': 1.3475877046585083, 'acc': 0.65625, 'step': 395},\n",
       "  {'loss': 1.4920697212219238, 'acc': 0.59375, 'step': 396},\n",
       "  {'loss': 1.507476568222046, 'acc': 0.5625, 'step': 397},\n",
       "  {'loss': 1.2643640041351318, 'acc': 0.65625, 'step': 398},\n",
       "  {'loss': 1.4238790273666382, 'acc': 0.59375, 'step': 399},\n",
       "  {'loss': 1.2558367252349854, 'acc': 0.71875, 'step': 400},\n",
       "  {'loss': 1.2560416460037231, 'acc': 0.71875, 'step': 401},\n",
       "  {'loss': 1.3720035552978516, 'acc': 0.59375, 'step': 402},\n",
       "  {'loss': 1.4375381469726562, 'acc': 0.65625, 'step': 403},\n",
       "  {'loss': 1.3469260931015015, 'acc': 0.5, 'step': 404},\n",
       "  {'loss': 1.4098161458969116, 'acc': 0.65625, 'step': 405},\n",
       "  {'loss': 1.2567105293273926, 'acc': 0.71875, 'step': 406},\n",
       "  {'loss': 1.288488507270813, 'acc': 0.625, 'step': 407},\n",
       "  {'loss': 1.2840238809585571, 'acc': 0.71875, 'step': 408},\n",
       "  {'loss': 1.3581781387329102, 'acc': 0.625, 'step': 409},\n",
       "  {'loss': 1.2933623790740967, 'acc': 0.5625, 'step': 410},\n",
       "  {'loss': 1.4337903261184692, 'acc': 0.625, 'step': 411},\n",
       "  {'loss': 1.3617923259735107, 'acc': 0.53125, 'step': 412},\n",
       "  {'loss': 1.419276237487793, 'acc': 0.65625, 'step': 413},\n",
       "  {'loss': 1.3476060628890991, 'acc': 0.59375, 'step': 414},\n",
       "  {'loss': 1.335463285446167, 'acc': 0.53125, 'step': 415},\n",
       "  {'loss': 1.2625986337661743, 'acc': 0.75, 'step': 416},\n",
       "  {'loss': 1.3449121713638306, 'acc': 0.5625, 'step': 417},\n",
       "  {'loss': 1.4654756784439087, 'acc': 0.5625, 'step': 418},\n",
       "  {'loss': 1.283774495124817, 'acc': 0.71875, 'step': 419},\n",
       "  {'loss': 1.4551857709884644, 'acc': 0.5, 'step': 420},\n",
       "  {'loss': 1.2481709718704224, 'acc': 0.65625, 'step': 421},\n",
       "  {'loss': 1.280831217765808, 'acc': 0.5625, 'step': 422},\n",
       "  {'loss': 1.333785057067871, 'acc': 0.53125, 'step': 423},\n",
       "  {'loss': 1.3007601499557495, 'acc': 0.625, 'step': 424},\n",
       "  {'loss': 1.1855894327163696, 'acc': 0.78125, 'step': 425},\n",
       "  {'loss': 1.2093907594680786, 'acc': 0.65625, 'step': 426},\n",
       "  {'loss': 1.2905302047729492, 'acc': 0.6875, 'step': 427},\n",
       "  {'loss': 1.3741779327392578, 'acc': 0.65625, 'step': 428},\n",
       "  {'loss': 1.4111472368240356, 'acc': 0.4375, 'step': 429},\n",
       "  {'loss': 1.2240142822265625, 'acc': 0.625, 'step': 430},\n",
       "  {'loss': 1.1454297304153442, 'acc': 0.75, 'step': 431},\n",
       "  {'loss': 1.1759113073349, 'acc': 0.75, 'step': 432},\n",
       "  {'loss': 1.2591397762298584, 'acc': 0.65625, 'step': 433},\n",
       "  {'loss': 1.476956844329834, 'acc': 0.46875, 'step': 434},\n",
       "  {'loss': 1.258696436882019, 'acc': 0.625, 'step': 435},\n",
       "  {'loss': 1.3177541494369507, 'acc': 0.65625, 'step': 436},\n",
       "  {'loss': 1.2857452630996704, 'acc': 0.65625, 'step': 437},\n",
       "  {'loss': 1.2661430835723877, 'acc': 0.625, 'step': 438},\n",
       "  {'loss': 1.1976414918899536, 'acc': 0.71875, 'step': 439},\n",
       "  {'loss': 1.135644793510437, 'acc': 0.75, 'step': 440},\n",
       "  {'loss': 1.1937037706375122, 'acc': 0.625, 'step': 441},\n",
       "  {'loss': 1.4527168273925781, 'acc': 0.46875, 'step': 442},\n",
       "  {'loss': 1.2384339570999146, 'acc': 0.75, 'step': 443},\n",
       "  {'loss': 1.2300225496292114, 'acc': 0.625, 'step': 444},\n",
       "  {'loss': 1.1631807088851929, 'acc': 0.8125, 'step': 445},\n",
       "  {'loss': 1.1954572200775146, 'acc': 0.625, 'step': 446},\n",
       "  {'loss': 1.3753896951675415, 'acc': 0.5, 'step': 447},\n",
       "  {'loss': 1.2770512104034424, 'acc': 0.6875, 'step': 448},\n",
       "  {'loss': 1.3399628400802612, 'acc': 0.5625, 'step': 449},\n",
       "  {'loss': 1.378073811531067, 'acc': 0.6875, 'step': 450},\n",
       "  {'loss': 1.3133352994918823, 'acc': 0.59375, 'step': 451},\n",
       "  {'loss': 1.125848650932312, 'acc': 0.6875, 'step': 452},\n",
       "  {'loss': 1.3604520559310913, 'acc': 0.5625, 'step': 453},\n",
       "  {'loss': 1.2709641456604004, 'acc': 0.625, 'step': 454},\n",
       "  {'loss': 1.1900966167449951, 'acc': 0.6875, 'step': 455},\n",
       "  {'loss': 1.2250218391418457, 'acc': 0.59375, 'step': 456},\n",
       "  {'loss': 1.2982462644577026, 'acc': 0.4375, 'step': 457},\n",
       "  {'loss': 1.34068763256073, 'acc': 0.53125, 'step': 458},\n",
       "  {'loss': 1.2225643396377563, 'acc': 0.59375, 'step': 459},\n",
       "  {'loss': 1.1529829502105713, 'acc': 0.59375, 'step': 460},\n",
       "  {'loss': 1.1984459161758423, 'acc': 0.5625, 'step': 461},\n",
       "  {'loss': 1.282111406326294, 'acc': 0.59375, 'step': 462},\n",
       "  {'loss': 1.2347925901412964, 'acc': 0.53125, 'step': 463},\n",
       "  {'loss': 1.2446049451828003, 'acc': 0.53125, 'step': 464},\n",
       "  {'loss': 1.2258819341659546, 'acc': 0.5625, 'step': 465},\n",
       "  {'loss': 1.233815312385559, 'acc': 0.5625, 'step': 466},\n",
       "  {'loss': 1.3569427728652954, 'acc': 0.4375, 'step': 467},\n",
       "  {'loss': 1.236432671546936, 'acc': 0.65625, 'step': 468},\n",
       "  {'loss': 1.2993886470794678, 'acc': 0.5, 'step': 469},\n",
       "  {'loss': 1.1619727611541748, 'acc': 0.625, 'step': 470},\n",
       "  {'loss': 1.2305405139923096, 'acc': 0.65625, 'step': 471},\n",
       "  {'loss': 1.0776070356369019, 'acc': 0.75, 'step': 472},\n",
       "  {'loss': 1.2023285627365112, 'acc': 0.59375, 'step': 473},\n",
       "  {'loss': 1.150619626045227, 'acc': 0.6875, 'step': 474},\n",
       "  {'loss': 1.063284993171692, 'acc': 0.75, 'step': 475},\n",
       "  {'loss': 1.2248375415802002, 'acc': 0.625, 'step': 476},\n",
       "  {'loss': 1.184450387954712, 'acc': 0.6875, 'step': 477},\n",
       "  {'loss': 1.1602309942245483, 'acc': 0.65625, 'step': 478},\n",
       "  {'loss': 1.1662927865982056, 'acc': 0.6875, 'step': 479},\n",
       "  {'loss': 1.0951745510101318, 'acc': 0.65625, 'step': 480},\n",
       "  {'loss': 1.1836843490600586, 'acc': 0.5625, 'step': 481},\n",
       "  {'loss': 1.0889151096343994, 'acc': 0.6875, 'step': 482},\n",
       "  {'loss': 1.2960095405578613, 'acc': 0.46875, 'step': 483},\n",
       "  {'loss': 1.3727192878723145, 'acc': 0.46875, 'step': 484},\n",
       "  {'loss': 1.115536093711853, 'acc': 0.53125, 'step': 485},\n",
       "  {'loss': 1.1840163469314575, 'acc': 0.59375, 'step': 486},\n",
       "  {'loss': 1.22294282913208, 'acc': 0.59375, 'step': 487},\n",
       "  {'loss': 1.1036405563354492, 'acc': 0.71875, 'step': 488},\n",
       "  {'loss': 1.3813554048538208, 'acc': 0.5625, 'step': 489},\n",
       "  {'loss': 1.077552318572998, 'acc': 0.71875, 'step': 490},\n",
       "  {'loss': 1.26741623878479, 'acc': 0.59375, 'step': 491},\n",
       "  {'loss': 1.1144334077835083, 'acc': 0.78125, 'step': 492},\n",
       "  {'loss': 1.1326040029525757, 'acc': 0.6875, 'step': 493},\n",
       "  {'loss': 1.1121413707733154, 'acc': 0.71875, 'step': 494},\n",
       "  {'loss': 1.0141196250915527, 'acc': 0.75, 'step': 495},\n",
       "  {'loss': 1.128421664237976, 'acc': 0.65625, 'step': 496},\n",
       "  {'loss': 0.9620873928070068, 'acc': 0.75, 'step': 497},\n",
       "  {'loss': 1.102956771850586, 'acc': 0.6875, 'step': 498},\n",
       "  {'loss': 1.1592018604278564, 'acc': 0.6875, 'step': 499},\n",
       "  {'loss': 1.229241967201233, 'acc': 0.625, 'step': 500},\n",
       "  {'loss': 1.16234290599823, 'acc': 0.59375, 'step': 501},\n",
       "  {'loss': 1.2709897756576538, 'acc': 0.5625, 'step': 502},\n",
       "  {'loss': 1.1128623485565186, 'acc': 0.65625, 'step': 503},\n",
       "  {'loss': 1.2408372163772583, 'acc': 0.59375, 'step': 504},\n",
       "  {'loss': 1.1174355745315552, 'acc': 0.65625, 'step': 505},\n",
       "  {'loss': 1.2108285427093506, 'acc': 0.59375, 'step': 506},\n",
       "  {'loss': 1.0428274869918823, 'acc': 0.71875, 'step': 507},\n",
       "  {'loss': 1.1267075538635254, 'acc': 0.625, 'step': 508},\n",
       "  {'loss': 1.252998948097229, 'acc': 0.78125, 'step': 509},\n",
       "  {'loss': 1.2369122505187988, 'acc': 0.5, 'step': 510},\n",
       "  {'loss': 1.2786550521850586, 'acc': 0.59375, 'step': 511},\n",
       "  {'loss': 1.0948495864868164, 'acc': 0.75, 'step': 512},\n",
       "  {'loss': 1.077799916267395, 'acc': 0.65625, 'step': 513},\n",
       "  {'loss': 0.9337738752365112, 'acc': 0.78125, 'step': 514},\n",
       "  {'loss': 1.1014454364776611, 'acc': 0.53125, 'step': 515},\n",
       "  {'loss': 1.177350640296936, 'acc': 0.6875, 'step': 516},\n",
       "  {'loss': 1.274355411529541, 'acc': 0.5, 'step': 517},\n",
       "  {'loss': 0.9718807935714722, 'acc': 0.71875, 'step': 518},\n",
       "  {'loss': 1.1340807676315308, 'acc': 0.625, 'step': 519},\n",
       "  {'loss': 1.1748305559158325, 'acc': 0.71875, 'step': 520},\n",
       "  {'loss': 1.0747004747390747, 'acc': 0.59375, 'step': 521},\n",
       "  {'loss': 1.1446824073791504, 'acc': 0.625, 'step': 522},\n",
       "  {'loss': 1.0208746194839478, 'acc': 0.6875, 'step': 523},\n",
       "  {'loss': 1.0132709741592407, 'acc': 0.65625, 'step': 524},\n",
       "  {'loss': 1.0361273288726807, 'acc': 0.65625, 'step': 525},\n",
       "  {'loss': 1.0738484859466553, 'acc': 0.5625, 'step': 526},\n",
       "  {'loss': 1.0892744064331055, 'acc': 0.65625, 'step': 527},\n",
       "  {'loss': 0.8841267824172974, 'acc': 0.6875, 'step': 528},\n",
       "  {'loss': 0.9640898108482361, 'acc': 0.75, 'step': 529},\n",
       "  {'loss': 0.9832271933555603, 'acc': 0.8125, 'step': 530},\n",
       "  {'loss': 1.0388071537017822, 'acc': 0.6875, 'step': 531},\n",
       "  {'loss': 1.1612403392791748, 'acc': 0.59375, 'step': 532},\n",
       "  {'loss': 1.0386581420898438, 'acc': 0.6875, 'step': 533},\n",
       "  {'loss': 1.1233879327774048, 'acc': 0.65625, 'step': 534},\n",
       "  {'loss': 1.0078401565551758, 'acc': 0.6875, 'step': 535},\n",
       "  {'loss': 1.2076879739761353, 'acc': 0.5, 'step': 536},\n",
       "  {'loss': 0.9431425333023071, 'acc': 0.6875, 'step': 537},\n",
       "  {'loss': 1.0585753917694092, 'acc': 0.6875, 'step': 538},\n",
       "  {'loss': 1.0661966800689697, 'acc': 0.59375, 'step': 539},\n",
       "  {'loss': 0.9112486243247986, 'acc': 0.71875, 'step': 540},\n",
       "  {'loss': 1.0681896209716797, 'acc': 0.59375, 'step': 541},\n",
       "  {'loss': 1.1365057229995728, 'acc': 0.59375, 'step': 542},\n",
       "  {'loss': 1.2003591060638428, 'acc': 0.5625, 'step': 543},\n",
       "  {'loss': 1.092370867729187, 'acc': 0.625, 'step': 544},\n",
       "  {'loss': 1.0417767763137817, 'acc': 0.5625, 'step': 545},\n",
       "  {'loss': 1.172988772392273, 'acc': 0.46875, 'step': 546},\n",
       "  {'loss': 1.0604667663574219, 'acc': 0.53125, 'step': 547},\n",
       "  {'loss': 1.10722815990448, 'acc': 0.6875, 'step': 548},\n",
       "  {'loss': 1.204410195350647, 'acc': 0.5, 'step': 549},\n",
       "  {'loss': 1.1236944198608398, 'acc': 0.625, 'step': 550},\n",
       "  {'loss': 1.2181562185287476, 'acc': 0.5, 'step': 551},\n",
       "  {'loss': 1.2115850448608398, 'acc': 0.53125, 'step': 552},\n",
       "  {'loss': 1.0347926616668701, 'acc': 0.6875, 'step': 553},\n",
       "  {'loss': 0.970977783203125, 'acc': 0.78125, 'step': 554},\n",
       "  {'loss': 1.1728488206863403, 'acc': 0.625, 'step': 555},\n",
       "  {'loss': 1.1345419883728027, 'acc': 0.59375, 'step': 556},\n",
       "  {'loss': 1.1298648118972778, 'acc': 0.625, 'step': 557},\n",
       "  {'loss': 1.1085377931594849, 'acc': 0.59375, 'step': 558},\n",
       "  {'loss': 1.020505428314209, 'acc': 0.6875, 'step': 559},\n",
       "  {'loss': 1.046740174293518, 'acc': 0.53125, 'step': 560},\n",
       "  {'loss': 1.1874759197235107, 'acc': 0.6875, 'step': 561},\n",
       "  {'loss': 0.9983804225921631, 'acc': 0.625, 'step': 562},\n",
       "  {'loss': 1.2341468334197998, 'acc': 0.625, 'step': 563},\n",
       "  {'loss': 0.9711606502532959, 'acc': 0.75, 'step': 564},\n",
       "  {'loss': 0.9688013195991516, 'acc': 0.75, 'step': 565},\n",
       "  {'loss': 1.1938568353652954, 'acc': 0.5625, 'step': 566},\n",
       "  {'loss': 1.0009963512420654, 'acc': 0.71875, 'step': 567},\n",
       "  {'loss': 1.1693041324615479, 'acc': 0.71875, 'step': 568},\n",
       "  {'loss': 1.228556752204895, 'acc': 0.59375, 'step': 569},\n",
       "  {'loss': 1.0204026699066162, 'acc': 0.71875, 'step': 570},\n",
       "  {'loss': 1.0943191051483154, 'acc': 0.6875, 'step': 571},\n",
       "  {'loss': 1.0071951150894165, 'acc': 0.65625, 'step': 572},\n",
       "  {'loss': 1.1318933963775635, 'acc': 0.59375, 'step': 573},\n",
       "  {'loss': 1.1166530847549438, 'acc': 0.59375, 'step': 574},\n",
       "  {'loss': 1.3742799758911133, 'acc': 0.40625, 'step': 575},\n",
       "  {'loss': 0.9050664305686951, 'acc': 0.75, 'step': 576},\n",
       "  {'loss': 1.1781307458877563, 'acc': 0.5, 'step': 577},\n",
       "  {'loss': 1.079114556312561, 'acc': 0.625, 'step': 578},\n",
       "  {'loss': 1.3243672847747803, 'acc': 0.5625, 'step': 579},\n",
       "  {'loss': 1.0601633787155151, 'acc': 0.65625, 'step': 580},\n",
       "  {'loss': 1.3045485019683838, 'acc': 0.625, 'step': 581},\n",
       "  {'loss': 0.9956488609313965, 'acc': 0.71875, 'step': 582},\n",
       "  {'loss': 1.1448503732681274, 'acc': 0.78125, 'step': 583},\n",
       "  {'loss': 0.954890251159668, 'acc': 0.75, 'step': 584},\n",
       "  {'loss': 1.0778292417526245, 'acc': 0.71875, 'step': 585},\n",
       "  {'loss': 1.0783611536026, 'acc': 0.71875, 'step': 586},\n",
       "  {'loss': 1.1355431079864502, 'acc': 0.625, 'step': 587},\n",
       "  {'loss': 1.0670028924942017, 'acc': 0.65625, 'step': 588},\n",
       "  {'loss': 1.2890022993087769, 'acc': 0.53125, 'step': 589},\n",
       "  {'loss': 1.026466965675354, 'acc': 0.625, 'step': 590},\n",
       "  {'loss': 1.1363123655319214, 'acc': 0.4375, 'step': 591},\n",
       "  {'loss': 1.3464645147323608, 'acc': 0.46875, 'step': 592},\n",
       "  {'loss': 1.1724529266357422, 'acc': 0.5625, 'step': 593},\n",
       "  {'loss': 1.0546408891677856, 'acc': 0.71875, 'step': 594},\n",
       "  {'loss': 1.3746254444122314, 'acc': 0.46875, 'step': 595},\n",
       "  {'loss': 1.040148377418518, 'acc': 0.65625, 'step': 596},\n",
       "  {'loss': 1.3011837005615234, 'acc': 0.53125, 'step': 597},\n",
       "  {'loss': 1.0857001543045044, 'acc': 0.46875, 'step': 598},\n",
       "  {'loss': 0.9547053575515747, 'acc': 0.71875, 'step': 599},\n",
       "  {'loss': 1.1194064617156982, 'acc': 0.53125, 'step': 600},\n",
       "  {'loss': 0.8898193836212158, 'acc': 0.75, 'step': 601},\n",
       "  {'loss': 1.2265877723693848, 'acc': 0.4375, 'step': 602},\n",
       "  {'loss': 1.1459119319915771, 'acc': 0.59375, 'step': 603},\n",
       "  {'loss': 1.175536036491394, 'acc': 0.53125, 'step': 604},\n",
       "  {'loss': 0.8414957523345947, 'acc': 0.6875, 'step': 605},\n",
       "  {'loss': 0.9769527316093445, 'acc': 0.65625, 'step': 606},\n",
       "  {'loss': 1.137311339378357, 'acc': 0.59375, 'step': 607},\n",
       "  {'loss': 1.1061129570007324, 'acc': 0.5625, 'step': 608},\n",
       "  {'loss': 1.017157793045044, 'acc': 0.59375, 'step': 609},\n",
       "  {'loss': 0.8744493126869202, 'acc': 0.75, 'step': 610},\n",
       "  {'loss': 1.063359260559082, 'acc': 0.59375, 'step': 611},\n",
       "  {'loss': 1.0778913497924805, 'acc': 0.625, 'step': 612},\n",
       "  {'loss': 1.0735071897506714, 'acc': 0.59375, 'step': 613},\n",
       "  {'loss': 1.1347047090530396, 'acc': 0.5, 'step': 614},\n",
       "  {'loss': 1.0275453329086304, 'acc': 0.53125, 'step': 615},\n",
       "  {'loss': 1.0733814239501953, 'acc': 0.65625, 'step': 616},\n",
       "  {'loss': 0.9686639904975891, 'acc': 0.65625, 'step': 617},\n",
       "  {'loss': 0.9072665572166443, 'acc': 0.75, 'step': 618},\n",
       "  {'loss': 1.0779491662979126, 'acc': 0.6875, 'step': 619},\n",
       "  {'loss': 1.0327339172363281, 'acc': 0.71875, 'step': 620},\n",
       "  {'loss': 0.9326238036155701, 'acc': 0.71875, 'step': 621},\n",
       "  {'loss': 1.1243436336517334, 'acc': 0.65625, 'step': 622},\n",
       "  {'loss': 1.1297845840454102, 'acc': 0.5625, 'step': 623},\n",
       "  {'loss': 0.9592466354370117, 'acc': 0.65625, 'step': 624},\n",
       "  {'loss': 1.2178090810775757, 'acc': 0.59375, 'step': 625},\n",
       "  {'loss': 1.227842926979065, 'acc': 0.65625, 'step': 626},\n",
       "  {'loss': 0.978049635887146, 'acc': 0.59375, 'step': 627},\n",
       "  {'loss': 0.9704087376594543, 'acc': 0.59375, 'step': 628},\n",
       "  {'loss': 1.2227941751480103, 'acc': 0.59375, 'step': 629},\n",
       "  {'loss': 1.0394184589385986, 'acc': 0.625, 'step': 630},\n",
       "  {'loss': 0.8991603255271912, 'acc': 0.78125, 'step': 631},\n",
       "  {'loss': 0.9334914684295654, 'acc': 0.6875, 'step': 632},\n",
       "  {'loss': 1.1074645519256592, 'acc': 0.59375, 'step': 633},\n",
       "  {'loss': 0.7893277406692505, 'acc': 0.71875, 'step': 634},\n",
       "  {'loss': 1.0105925798416138, 'acc': 0.6875, 'step': 635},\n",
       "  {'loss': 0.9718763828277588, 'acc': 0.6875, 'step': 636},\n",
       "  {'loss': 0.955807089805603, 'acc': 0.65625, 'step': 637},\n",
       "  {'loss': 1.030551552772522, 'acc': 0.75, 'step': 638},\n",
       "  {'loss': 1.2175593376159668, 'acc': 0.53125, 'step': 639},\n",
       "  {'loss': 1.009257435798645, 'acc': 0.5625, 'step': 640},\n",
       "  {'loss': 1.1037547588348389, 'acc': 0.5625, 'step': 641},\n",
       "  {'loss': 0.8422942757606506, 'acc': 0.78125, 'step': 642},\n",
       "  {'loss': 1.0025960206985474, 'acc': 0.625, 'step': 643},\n",
       "  {'loss': 0.7942824363708496, 'acc': 0.75, 'step': 644},\n",
       "  {'loss': 1.0392696857452393, 'acc': 0.625, 'step': 645},\n",
       "  {'loss': 1.0257556438446045, 'acc': 0.71875, 'step': 646},\n",
       "  {'loss': 1.032271146774292, 'acc': 0.59375, 'step': 647},\n",
       "  {'loss': 0.9293164610862732, 'acc': 0.6875, 'step': 648},\n",
       "  {'loss': 0.8761258125305176, 'acc': 0.78125, 'step': 649},\n",
       "  {'loss': 1.0287381410598755, 'acc': 0.59375, 'step': 650},\n",
       "  {'loss': 0.8869190216064453, 'acc': 0.78125, 'step': 651},\n",
       "  {'loss': 0.8992908596992493, 'acc': 0.625, 'step': 652},\n",
       "  {'loss': 1.179452896118164, 'acc': 0.5625, 'step': 653},\n",
       "  {'loss': 0.8990182280540466, 'acc': 0.71875, 'step': 654},\n",
       "  {'loss': 1.0659416913986206, 'acc': 0.5625, 'step': 655},\n",
       "  {'loss': 0.985497236251831, 'acc': 0.65625, 'step': 656},\n",
       "  {'loss': 1.1538323163986206, 'acc': 0.5625, 'step': 657},\n",
       "  {'loss': 0.918341875076294, 'acc': 0.75, 'step': 658},\n",
       "  {'loss': 1.0310438871383667, 'acc': 0.5625, 'step': 659},\n",
       "  {'loss': 0.9941337704658508, 'acc': 0.6875, 'step': 660},\n",
       "  {'loss': 0.9798248410224915, 'acc': 0.5625, 'step': 661},\n",
       "  {'loss': 1.1152207851409912, 'acc': 0.46875, 'step': 662},\n",
       "  {'loss': 1.0478256940841675, 'acc': 0.625, 'step': 663},\n",
       "  {'loss': 1.0410577058792114, 'acc': 0.625, 'step': 664},\n",
       "  {'loss': 0.8994457721710205, 'acc': 0.78125, 'step': 665},\n",
       "  {'loss': 1.1788102388381958, 'acc': 0.65625, 'step': 666},\n",
       "  {'loss': 0.9135791659355164, 'acc': 0.65625, 'step': 667},\n",
       "  {'loss': 0.9014241695404053, 'acc': 0.71875, 'step': 668},\n",
       "  {'loss': 0.8203511238098145, 'acc': 0.75, 'step': 669},\n",
       "  {'loss': 0.8331351280212402, 'acc': 0.78125, 'step': 670},\n",
       "  {'loss': 0.8988828063011169, 'acc': 0.6875, 'step': 671},\n",
       "  {'loss': 0.9346579313278198, 'acc': 0.6875, 'step': 672},\n",
       "  {'loss': 1.0113158226013184, 'acc': 0.625, 'step': 673},\n",
       "  {'loss': 1.0210322141647339, 'acc': 0.75, 'step': 674},\n",
       "  {'loss': 0.7498787641525269, 'acc': 0.78125, 'step': 675},\n",
       "  {'loss': 0.9102239012718201, 'acc': 0.71875, 'step': 676},\n",
       "  {'loss': 0.8202638626098633, 'acc': 0.75, 'step': 677},\n",
       "  {'loss': 0.8872522115707397, 'acc': 0.65625, 'step': 678},\n",
       "  {'loss': 0.8463382124900818, 'acc': 0.6875, 'step': 679},\n",
       "  {'loss': 0.9790681004524231, 'acc': 0.6875, 'step': 680},\n",
       "  {'loss': 0.8385596871376038, 'acc': 0.71875, 'step': 681},\n",
       "  {'loss': 1.0434738397598267, 'acc': 0.59375, 'step': 682},\n",
       "  {'loss': 0.8929124474525452, 'acc': 0.6875, 'step': 683},\n",
       "  {'loss': 0.9736168384552002, 'acc': 0.625, 'step': 684},\n",
       "  {'loss': 0.905194103717804, 'acc': 0.6875, 'step': 685},\n",
       "  {'loss': 1.0468549728393555, 'acc': 0.4375, 'step': 686},\n",
       "  {'loss': 0.991938591003418, 'acc': 0.5625, 'step': 687},\n",
       "  {'loss': 1.3202258348464966, 'acc': 0.5625, 'step': 688},\n",
       "  {'loss': 0.7668843865394592, 'acc': 0.75, 'step': 689},\n",
       "  {'loss': 0.9259662628173828, 'acc': 0.5625, 'step': 690},\n",
       "  {'loss': 0.8429948091506958, 'acc': 0.6875, 'step': 691},\n",
       "  {'loss': 0.9556249380111694, 'acc': 0.65625, 'step': 692},\n",
       "  {'loss': 0.9242536425590515, 'acc': 0.53125, 'step': 693},\n",
       "  {'loss': 0.9684799313545227, 'acc': 0.59375, 'step': 694},\n",
       "  {'loss': 0.9142760634422302, 'acc': 0.6875, 'step': 695},\n",
       "  {'loss': 1.0939992666244507, 'acc': 0.5625, 'step': 696},\n",
       "  {'loss': 0.9784833788871765, 'acc': 0.59375, 'step': 697},\n",
       "  {'loss': 0.7253112196922302, 'acc': 0.8125, 'step': 698},\n",
       "  {'loss': 0.9332248568534851, 'acc': 0.59375, 'step': 699},\n",
       "  {'loss': 0.8141515851020813, 'acc': 0.8125, 'step': 700},\n",
       "  {'loss': 1.16206693649292, 'acc': 0.65625, 'step': 701},\n",
       "  {'loss': 0.8727152943611145, 'acc': 0.71875, 'step': 702},\n",
       "  {'loss': 1.0296796560287476, 'acc': 0.5625, 'step': 703},\n",
       "  {'loss': 0.9891523718833923, 'acc': 0.65625, 'step': 704},\n",
       "  {'loss': 0.9199206829071045, 'acc': 0.59375, 'step': 705},\n",
       "  {'loss': 1.0342155694961548, 'acc': 0.5625, 'step': 706},\n",
       "  {'loss': 0.8718411326408386, 'acc': 0.71875, 'step': 707},\n",
       "  {'loss': 1.2136839628219604, 'acc': 0.59375, 'step': 708},\n",
       "  {'loss': 1.1587681770324707, 'acc': 0.5625, 'step': 709},\n",
       "  {'loss': 0.7869465947151184, 'acc': 0.71875, 'step': 710},\n",
       "  {'loss': 0.7000243067741394, 'acc': 0.78125, 'step': 711},\n",
       "  {'loss': 0.9712157249450684, 'acc': 0.59375, 'step': 712},\n",
       "  {'loss': 0.7291735410690308, 'acc': 0.84375, 'step': 713},\n",
       "  {'loss': 1.0205614566802979, 'acc': 0.59375, 'step': 714},\n",
       "  {'loss': 0.8678490519523621, 'acc': 0.65625, 'step': 715},\n",
       "  {'loss': 1.0303610563278198, 'acc': 0.53125, 'step': 716},\n",
       "  {'loss': 0.8293726444244385, 'acc': 0.6875, 'step': 717},\n",
       "  {'loss': 0.9813209176063538, 'acc': 0.625, 'step': 718},\n",
       "  {'loss': 0.824887752532959, 'acc': 0.75, 'step': 719},\n",
       "  {'loss': 1.0623161792755127, 'acc': 0.625, 'step': 720},\n",
       "  {'loss': 1.1883172988891602, 'acc': 0.59375, 'step': 721},\n",
       "  {'loss': 0.755569338798523, 'acc': 0.84375, 'step': 722},\n",
       "  {'loss': 0.8503912687301636, 'acc': 0.75, 'step': 723},\n",
       "  {'loss': 1.4285101890563965, 'acc': 0.5625, 'step': 724},\n",
       "  {'loss': 1.0672935247421265, 'acc': 0.53125, 'step': 725},\n",
       "  {'loss': 0.9260792136192322, 'acc': 0.71875, 'step': 726},\n",
       "  {'loss': 1.030642032623291, 'acc': 0.65625, 'step': 727},\n",
       "  {'loss': 0.7845454216003418, 'acc': 0.875, 'step': 728},\n",
       "  {'loss': 1.0390253067016602, 'acc': 0.46875, 'step': 729},\n",
       "  {'loss': 1.138877272605896, 'acc': 0.5625, 'step': 730},\n",
       "  {'loss': 0.9674479961395264, 'acc': 0.6875, 'step': 731},\n",
       "  {'loss': 0.9029251933097839, 'acc': 0.65625, 'step': 732},\n",
       "  {'loss': 0.7733612060546875, 'acc': 0.71875, 'step': 733},\n",
       "  {'loss': 1.0164097547531128, 'acc': 0.5625, 'step': 734},\n",
       "  {'loss': 1.0222406387329102, 'acc': 0.53125, 'step': 735},\n",
       "  {'loss': 0.840175449848175, 'acc': 0.65625, 'step': 736},\n",
       "  {'loss': 0.7277128100395203, 'acc': 0.71875, 'step': 737},\n",
       "  {'loss': 0.8750345706939697, 'acc': 0.65625, 'step': 738},\n",
       "  {'loss': 0.9172612428665161, 'acc': 0.625, 'step': 739},\n",
       "  {'loss': 0.7918678522109985, 'acc': 0.8125, 'step': 740},\n",
       "  {'loss': 0.7366684079170227, 'acc': 0.78125, 'step': 741},\n",
       "  {'loss': 1.0570826530456543, 'acc': 0.65625, 'step': 742},\n",
       "  {'loss': 0.8515930771827698, 'acc': 0.71875, 'step': 743},\n",
       "  {'loss': 0.924134373664856, 'acc': 0.71875, 'step': 744},\n",
       "  {'loss': 1.070435881614685, 'acc': 0.5, 'step': 745},\n",
       "  {'loss': 0.947306752204895, 'acc': 0.625, 'step': 746},\n",
       "  {'loss': 1.0458896160125732, 'acc': 0.65625, 'step': 747},\n",
       "  {'loss': 0.9427541494369507, 'acc': 0.65625, 'step': 748},\n",
       "  {'loss': 1.174302339553833, 'acc': 0.46875, 'step': 749},\n",
       "  {'loss': 0.8657355308532715, 'acc': 0.6875, 'step': 750},\n",
       "  {'loss': 0.8935779333114624, 'acc': 0.59375, 'step': 751},\n",
       "  {'loss': 0.8804115056991577, 'acc': 0.6875, 'step': 752},\n",
       "  {'loss': 0.8328831195831299, 'acc': 0.65625, 'step': 753},\n",
       "  {'loss': 0.9612150192260742, 'acc': 0.53125, 'step': 754},\n",
       "  {'loss': 0.7417545914649963, 'acc': 0.75, 'step': 755},\n",
       "  {'loss': 1.0339022874832153, 'acc': 0.59375, 'step': 756},\n",
       "  {'loss': 0.9751640558242798, 'acc': 0.6875, 'step': 757},\n",
       "  {'loss': 0.8325225114822388, 'acc': 0.84375, 'step': 758},\n",
       "  {'loss': 0.929027795791626, 'acc': 0.6875, 'step': 759},\n",
       "  {'loss': 0.9002470374107361, 'acc': 0.78125, 'step': 760},\n",
       "  {'loss': 0.7984634041786194, 'acc': 0.78125, 'step': 761},\n",
       "  {'loss': 0.8125848770141602, 'acc': 0.6875, 'step': 762},\n",
       "  {'loss': 0.925374448299408, 'acc': 0.71875, 'step': 763},\n",
       "  {'loss': 0.9751754403114319, 'acc': 0.59375, 'step': 764},\n",
       "  {'loss': 1.0415185689926147, 'acc': 0.71875, 'step': 765},\n",
       "  {'loss': 0.8038910031318665, 'acc': 0.71875, 'step': 766},\n",
       "  {'loss': 0.8007174730300903, 'acc': 0.65625, 'step': 767},\n",
       "  {'loss': 0.7631610631942749, 'acc': 0.71875, 'step': 768},\n",
       "  {'loss': 0.7226811051368713, 'acc': 0.8125, 'step': 769},\n",
       "  {'loss': 0.8112521171569824, 'acc': 0.6875, 'step': 770},\n",
       "  {'loss': 0.7511272430419922, 'acc': 0.84375, 'step': 771},\n",
       "  {'loss': 0.7265743613243103, 'acc': 0.78125, 'step': 772},\n",
       "  {'loss': 0.9452349543571472, 'acc': 0.71875, 'step': 773},\n",
       "  {'loss': 0.8073768019676208, 'acc': 0.78125, 'step': 774},\n",
       "  {'loss': 0.9254174828529358, 'acc': 0.59375, 'step': 775},\n",
       "  {'loss': 1.1019617319107056, 'acc': 0.6875, 'step': 776},\n",
       "  {'loss': 1.1665209531784058, 'acc': 0.6875, 'step': 777},\n",
       "  {'loss': 0.858379602432251, 'acc': 0.6875, 'step': 778},\n",
       "  {'loss': 0.684151828289032, 'acc': 0.84375, 'step': 779},\n",
       "  {'loss': 0.9045427441596985, 'acc': 0.65625, 'step': 780},\n",
       "  {'loss': 0.8682602047920227, 'acc': 0.65625, 'step': 781},\n",
       "  {'loss': 0.9244223833084106, 'acc': 0.625, 'step': 782},\n",
       "  {'loss': 1.2069894075393677, 'acc': 0.5625, 'step': 783},\n",
       "  {'loss': 0.8153578042984009, 'acc': 0.65625, 'step': 784},\n",
       "  {'loss': 0.9045884013175964, 'acc': 0.65625, 'step': 785},\n",
       "  {'loss': 1.068603277206421, 'acc': 0.5, 'step': 786},\n",
       "  {'loss': 0.8717367649078369, 'acc': 0.6875, 'step': 787},\n",
       "  {'loss': 0.7210232019424438, 'acc': 0.84375, 'step': 788},\n",
       "  {'loss': 0.8841554522514343, 'acc': 0.65625, 'step': 789},\n",
       "  {'loss': 0.7378966212272644, 'acc': 0.78125, 'step': 790},\n",
       "  {'loss': 0.8730708956718445, 'acc': 0.8125, 'step': 791},\n",
       "  {'loss': 0.9682477712631226, 'acc': 0.5625, 'step': 792},\n",
       "  {'loss': 0.7718604803085327, 'acc': 0.78125, 'step': 793},\n",
       "  {'loss': 0.8813468813896179, 'acc': 0.53125, 'step': 794},\n",
       "  {'loss': 0.8084524869918823, 'acc': 0.65625, 'step': 795},\n",
       "  {'loss': 0.6869726181030273, 'acc': 0.78125, 'step': 796},\n",
       "  {'loss': 0.9381449222564697, 'acc': 0.5625, 'step': 797},\n",
       "  {'loss': 0.6955735683441162, 'acc': 0.78125, 'step': 798},\n",
       "  {'loss': 0.9176405668258667, 'acc': 0.6875, 'step': 799},\n",
       "  {'loss': 1.0323010683059692, 'acc': 0.59375, 'step': 800},\n",
       "  {'loss': 0.819749116897583, 'acc': 0.6875, 'step': 801},\n",
       "  {'loss': 0.9100178480148315, 'acc': 0.71875, 'step': 802},\n",
       "  {'loss': 1.0012680292129517, 'acc': 0.65625, 'step': 803},\n",
       "  {'loss': 1.0115474462509155, 'acc': 0.65625, 'step': 804},\n",
       "  {'loss': 0.8325516581535339, 'acc': 0.78125, 'step': 805},\n",
       "  {'loss': 0.8266919851303101, 'acc': 0.6875, 'step': 806},\n",
       "  {'loss': 0.9453639388084412, 'acc': 0.5625, 'step': 807},\n",
       "  {'loss': 0.8272175788879395, 'acc': 0.71875, 'step': 808},\n",
       "  {'loss': 0.6756700873374939, 'acc': 0.75, 'step': 809},\n",
       "  {'loss': 1.1519038677215576, 'acc': 0.53125, 'step': 810},\n",
       "  {'loss': 1.0511350631713867, 'acc': 0.5625, 'step': 811},\n",
       "  {'loss': 0.7131602764129639, 'acc': 0.8125, 'step': 812},\n",
       "  {'loss': 0.810680627822876, 'acc': 0.6875, 'step': 813},\n",
       "  {'loss': 0.6928457021713257, 'acc': 0.78125, 'step': 814},\n",
       "  {'loss': 0.786334753036499, 'acc': 0.78125, 'step': 815},\n",
       "  {'loss': 0.7821758985519409, 'acc': 0.78125, 'step': 816},\n",
       "  {'loss': 0.8083884716033936, 'acc': 0.625, 'step': 817},\n",
       "  {'loss': 0.8494171500205994, 'acc': 0.78125, 'step': 818},\n",
       "  {'loss': 0.9088443517684937, 'acc': 0.625, 'step': 819},\n",
       "  {'loss': 0.9114881753921509, 'acc': 0.6875, 'step': 820},\n",
       "  {'loss': 0.8069854974746704, 'acc': 0.75, 'step': 821},\n",
       "  {'loss': 0.7360156178474426, 'acc': 0.78125, 'step': 822},\n",
       "  {'loss': 0.9009905457496643, 'acc': 0.625, 'step': 823},\n",
       "  {'loss': 0.9191851019859314, 'acc': 0.78125, 'step': 824},\n",
       "  {'loss': 0.8115236163139343, 'acc': 0.71875, 'step': 825},\n",
       "  {'loss': 1.251570463180542, 'acc': 0.625, 'step': 826},\n",
       "  {'loss': 0.8104158639907837, 'acc': 0.71875, 'step': 827},\n",
       "  {'loss': 1.1414361000061035, 'acc': 0.65625, 'step': 828},\n",
       "  {'loss': 0.8788070678710938, 'acc': 0.625, 'step': 829},\n",
       "  {'loss': 0.9329858422279358, 'acc': 0.59375, 'step': 830},\n",
       "  {'loss': 1.1226410865783691, 'acc': 0.46875, 'step': 831},\n",
       "  {'loss': 0.9593477845191956, 'acc': 0.5, 'step': 832},\n",
       "  {'loss': 0.7664288878440857, 'acc': 0.8125, 'step': 833},\n",
       "  {'loss': 0.5894187688827515, 'acc': 0.875, 'step': 834},\n",
       "  {'loss': 0.9277225732803345, 'acc': 0.6875, 'step': 835},\n",
       "  {'loss': 0.8745330572128296, 'acc': 0.53125, 'step': 836},\n",
       "  {'loss': 0.7137291431427002, 'acc': 0.78125, 'step': 837},\n",
       "  {'loss': 0.7768221497535706, 'acc': 0.625, 'step': 838},\n",
       "  {'loss': 0.9040935635566711, 'acc': 0.625, 'step': 839},\n",
       "  {'loss': 0.9791474342346191, 'acc': 0.5, 'step': 840},\n",
       "  {'loss': 0.6798197031021118, 'acc': 0.75, 'step': 841},\n",
       "  {'loss': 0.860880970954895, 'acc': 0.6875, 'step': 842},\n",
       "  {'loss': 0.8538599014282227, 'acc': 0.59375, 'step': 843},\n",
       "  {'loss': 0.6981011033058167, 'acc': 0.8125, 'step': 844},\n",
       "  {'loss': 1.0463565587997437, 'acc': 0.75, 'step': 845},\n",
       "  {'loss': 0.7876564264297485, 'acc': 0.8125, 'step': 846},\n",
       "  {'loss': 0.8291563987731934, 'acc': 0.71875, 'step': 847},\n",
       "  {'loss': 0.8590653538703918, 'acc': 0.65625, 'step': 848},\n",
       "  {'loss': 1.1026860475540161, 'acc': 0.59375, 'step': 849},\n",
       "  {'loss': 0.8856199979782104, 'acc': 0.71875, 'step': 850},\n",
       "  {'loss': 0.6513863205909729, 'acc': 0.84375, 'step': 851},\n",
       "  {'loss': 0.8806024789810181, 'acc': 0.53125, 'step': 852},\n",
       "  {'loss': 0.8970323204994202, 'acc': 0.78125, 'step': 853},\n",
       "  {'loss': 0.911264181137085, 'acc': 0.625, 'step': 854},\n",
       "  {'loss': 1.0341758728027344, 'acc': 0.53125, 'step': 855},\n",
       "  {'loss': 0.7406048774719238, 'acc': 0.8125, 'step': 856},\n",
       "  {'loss': 0.9246057868003845, 'acc': 0.71875, 'step': 857},\n",
       "  {'loss': 0.949266791343689, 'acc': 0.65625, 'step': 858},\n",
       "  {'loss': 0.8062666654586792, 'acc': 0.6875, 'step': 859},\n",
       "  {'loss': 0.9858416318893433, 'acc': 0.625, 'step': 860},\n",
       "  {'loss': 0.8180692791938782, 'acc': 0.84375, 'step': 861},\n",
       "  {'loss': 1.0520259141921997, 'acc': 0.65625, 'step': 862},\n",
       "  {'loss': 1.051614761352539, 'acc': 0.59375, 'step': 863},\n",
       "  {'loss': 0.6976891756057739, 'acc': 0.75, 'step': 864},\n",
       "  {'loss': 0.7838286757469177, 'acc': 0.6875, 'step': 865},\n",
       "  {'loss': 0.7858207821846008, 'acc': 0.625, 'step': 866},\n",
       "  {'loss': 0.8250665068626404, 'acc': 0.6875, 'step': 867},\n",
       "  {'loss': 0.7677322030067444, 'acc': 0.65625, 'step': 868},\n",
       "  {'loss': 0.7571609616279602, 'acc': 0.75, 'step': 869},\n",
       "  {'loss': 1.2668770551681519, 'acc': 0.59375, 'step': 870},\n",
       "  {'loss': 0.955495297908783, 'acc': 0.5625, 'step': 871},\n",
       "  {'loss': 1.1036754846572876, 'acc': 0.625, 'step': 872},\n",
       "  {'loss': 0.9933348894119263, 'acc': 0.65625, 'step': 873},\n",
       "  {'loss': 1.315500259399414, 'acc': 0.6875, 'step': 874},\n",
       "  {'loss': 0.7646247148513794, 'acc': 0.75, 'step': 875},\n",
       "  {'loss': 0.6527360677719116, 'acc': 0.75, 'step': 876},\n",
       "  {'loss': 0.6286828517913818, 'acc': 0.8125, 'step': 877},\n",
       "  {'loss': 0.9594937562942505, 'acc': 0.6875, 'step': 878},\n",
       "  {'loss': 1.2236542701721191, 'acc': 0.625, 'step': 879},\n",
       "  {'loss': 0.8032259345054626, 'acc': 0.65625, 'step': 880},\n",
       "  {'loss': 0.6819165349006653, 'acc': 0.84375, 'step': 881},\n",
       "  {'loss': 0.6631482839584351, 'acc': 0.75, 'step': 882},\n",
       "  {'loss': 0.7040246725082397, 'acc': 0.71875, 'step': 883},\n",
       "  {'loss': 0.6725398302078247, 'acc': 0.75, 'step': 884},\n",
       "  {'loss': 0.8717836737632751, 'acc': 0.65625, 'step': 885},\n",
       "  {'loss': 0.8705689311027527, 'acc': 0.65625, 'step': 886},\n",
       "  {'loss': 0.7644984722137451, 'acc': 0.71875, 'step': 887},\n",
       "  {'loss': 0.9433280825614929, 'acc': 0.53125, 'step': 888},\n",
       "  {'loss': 0.5521475672721863, 'acc': 0.90625, 'step': 889},\n",
       "  {'loss': 0.6726305484771729, 'acc': 0.71875, 'step': 890},\n",
       "  {'loss': 0.7877534627914429, 'acc': 0.75, 'step': 891},\n",
       "  {'loss': 0.6900715827941895, 'acc': 0.8125, 'step': 892},\n",
       "  {'loss': 0.7567341923713684, 'acc': 0.78125, 'step': 893},\n",
       "  {'loss': 0.9750564098358154, 'acc': 0.625, 'step': 894},\n",
       "  {'loss': 0.7240450978279114, 'acc': 0.75, 'step': 895},\n",
       "  {'loss': 0.711276113986969, 'acc': 0.8125, 'step': 896},\n",
       "  {'loss': 0.7868947982788086, 'acc': 0.75, 'step': 897},\n",
       "  {'loss': 0.7047884464263916, 'acc': 0.84375, 'step': 898},\n",
       "  {'loss': 0.7054994702339172, 'acc': 0.71875, 'step': 899},\n",
       "  {'loss': 0.7631192803382874, 'acc': 0.6875, 'step': 900},\n",
       "  {'loss': 0.9527212977409363, 'acc': 0.5625, 'step': 901},\n",
       "  {'loss': 0.67611163854599, 'acc': 0.78125, 'step': 902},\n",
       "  {'loss': 0.8490203619003296, 'acc': 0.78125, 'step': 903},\n",
       "  {'loss': 0.581373929977417, 'acc': 0.78125, 'step': 904},\n",
       "  {'loss': 0.9429915547370911, 'acc': 0.59375, 'step': 905},\n",
       "  {'loss': 0.5958141088485718, 'acc': 0.84375, 'step': 906},\n",
       "  {'loss': 0.824735701084137, 'acc': 0.78125, 'step': 907},\n",
       "  {'loss': 0.7968555092811584, 'acc': 0.6875, 'step': 908},\n",
       "  {'loss': 1.0027703046798706, 'acc': 0.71875, 'step': 909},\n",
       "  {'loss': 0.7714266180992126, 'acc': 0.65625, 'step': 910},\n",
       "  {'loss': 0.9135071635246277, 'acc': 0.71875, 'step': 911},\n",
       "  {'loss': 0.7167826294898987, 'acc': 0.71875, 'step': 912},\n",
       "  {'loss': 0.9855917096138, 'acc': 0.625, 'step': 913},\n",
       "  {'loss': 0.8035799264907837, 'acc': 0.6875, 'step': 914},\n",
       "  {'loss': 0.8468099236488342, 'acc': 0.59375, 'step': 915},\n",
       "  {'loss': 0.8640868663787842, 'acc': 0.75, 'step': 916},\n",
       "  {'loss': 0.7716690301895142, 'acc': 0.8125, 'step': 917},\n",
       "  {'loss': 0.8153160810470581, 'acc': 0.78125, 'step': 918},\n",
       "  {'loss': 0.8029673099517822, 'acc': 0.75, 'step': 919},\n",
       "  {'loss': 0.6733248829841614, 'acc': 0.78125, 'step': 920},\n",
       "  {'loss': 0.6359025835990906, 'acc': 0.84375, 'step': 921},\n",
       "  {'loss': 0.9603350758552551, 'acc': 0.5625, 'step': 922},\n",
       "  {'loss': 0.9291775822639465, 'acc': 0.59375, 'step': 923},\n",
       "  {'loss': 0.6196907758712769, 'acc': 0.8125, 'step': 924},\n",
       "  {'loss': 0.6000352501869202, 'acc': 0.84375, 'step': 925},\n",
       "  {'loss': 0.9555598497390747, 'acc': 0.65625, 'step': 926},\n",
       "  {'loss': 0.7488731741905212, 'acc': 0.75, 'step': 927},\n",
       "  {'loss': 0.8646790981292725, 'acc': 0.71875, 'step': 928},\n",
       "  {'loss': 0.6907994151115417, 'acc': 0.78125, 'step': 929},\n",
       "  {'loss': 1.0358738899230957, 'acc': 0.53125, 'step': 930},\n",
       "  {'loss': 1.0199517011642456, 'acc': 0.625, 'step': 931},\n",
       "  {'loss': 0.8799325227737427, 'acc': 0.71875, 'step': 932},\n",
       "  {'loss': 0.8513359427452087, 'acc': 0.625, 'step': 933},\n",
       "  {'loss': 1.0029675960540771, 'acc': 0.53125, 'step': 934},\n",
       "  {'loss': 0.8021720051765442, 'acc': 0.65625, 'step': 935},\n",
       "  {'loss': 0.5979167222976685, 'acc': 0.78125, 'step': 936},\n",
       "  {'loss': 0.7905339598655701, 'acc': 0.65625, 'step': 937},\n",
       "  {'loss': 0.938012957572937, 'acc': 0.53125, 'step': 938},\n",
       "  {'loss': 0.9255504608154297, 'acc': 0.75, 'step': 939},\n",
       "  {'loss': 0.8139556050300598, 'acc': 0.78125, 'step': 940},\n",
       "  {'loss': 0.8249056339263916, 'acc': 0.6875, 'step': 941},\n",
       "  {'loss': 0.8469886779785156, 'acc': 0.6875, 'step': 942},\n",
       "  {'loss': 0.9667197465896606, 'acc': 0.71875, 'step': 943},\n",
       "  {'loss': 0.8601102828979492, 'acc': 0.6875, 'step': 944},\n",
       "  {'loss': 0.6457745432853699, 'acc': 0.8125, 'step': 945},\n",
       "  {'loss': 0.980417013168335, 'acc': 0.71875, 'step': 946},\n",
       "  {'loss': 0.7902274131774902, 'acc': 0.6875, 'step': 947},\n",
       "  {'loss': 0.9509813785552979, 'acc': 0.65625, 'step': 948},\n",
       "  {'loss': 0.8377382755279541, 'acc': 0.625, 'step': 949},\n",
       "  {'loss': 0.6589603424072266, 'acc': 0.6875, 'step': 950},\n",
       "  {'loss': 0.9355448484420776, 'acc': 0.65625, 'step': 951},\n",
       "  {'loss': 0.8373895883560181, 'acc': 0.71875, 'step': 952},\n",
       "  {'loss': 0.9180326461791992, 'acc': 0.625, 'step': 953},\n",
       "  {'loss': 0.7618438005447388, 'acc': 0.78125, 'step': 954},\n",
       "  {'loss': 0.9751368165016174, 'acc': 0.6875, 'step': 955},\n",
       "  {'loss': 0.980253279209137, 'acc': 0.71875, 'step': 956},\n",
       "  {'loss': 0.6886940002441406, 'acc': 0.78125, 'step': 957},\n",
       "  {'loss': 0.7045366168022156, 'acc': 0.8125, 'step': 958},\n",
       "  {'loss': 0.8224061131477356, 'acc': 0.625, 'step': 959},\n",
       "  {'loss': 0.8806051015853882, 'acc': 0.65625, 'step': 960},\n",
       "  {'loss': 0.9203317761421204, 'acc': 0.625, 'step': 961},\n",
       "  {'loss': 0.9053964018821716, 'acc': 0.625, 'step': 962},\n",
       "  {'loss': 0.9242196083068848, 'acc': 0.71875, 'step': 963},\n",
       "  {'loss': 0.6911543607711792, 'acc': 0.71875, 'step': 964},\n",
       "  {'loss': 0.8112313151359558, 'acc': 0.65625, 'step': 965},\n",
       "  {'loss': 0.7058265805244446, 'acc': 0.75, 'step': 966},\n",
       "  {'loss': 0.8945645689964294, 'acc': 0.65625, 'step': 967},\n",
       "  {'loss': 0.8418676853179932, 'acc': 0.71875, 'step': 968},\n",
       "  {'loss': 0.7656346559524536, 'acc': 0.75, 'step': 969},\n",
       "  {'loss': 0.8627787828445435, 'acc': 0.625, 'step': 970},\n",
       "  {'loss': 0.6986199617385864, 'acc': 0.8125, 'step': 971},\n",
       "  {'loss': 0.770557701587677, 'acc': 0.71875, 'step': 972},\n",
       "  {'loss': 0.5675989985466003, 'acc': 0.78125, 'step': 973},\n",
       "  {'loss': 0.9419990181922913, 'acc': 0.6875, 'step': 974},\n",
       "  {'loss': 0.8272058367729187, 'acc': 0.625, 'step': 975},\n",
       "  {'loss': 0.872096598148346, 'acc': 0.6875, 'step': 976},\n",
       "  {'loss': 0.7182811498641968, 'acc': 0.71875, 'step': 977},\n",
       "  {'loss': 0.8446375131607056, 'acc': 0.6875, 'step': 978},\n",
       "  {'loss': 0.7163417935371399, 'acc': 0.6875, 'step': 979},\n",
       "  {'loss': 0.7411884665489197, 'acc': 0.6875, 'step': 980},\n",
       "  {'loss': 0.5561521649360657, 'acc': 0.875, 'step': 981},\n",
       "  {'loss': 0.8131850361824036, 'acc': 0.5625, 'step': 982},\n",
       "  {'loss': 0.8633564710617065, 'acc': 0.71875, 'step': 983},\n",
       "  {'loss': 1.0443350076675415, 'acc': 0.53125, 'step': 984},\n",
       "  {'loss': 0.691367506980896, 'acc': 0.65625, 'step': 985},\n",
       "  {'loss': 0.5991159081459045, 'acc': 0.8125, 'step': 986},\n",
       "  {'loss': 0.8413814306259155, 'acc': 0.59375, 'step': 987},\n",
       "  {'loss': 0.8719567656517029, 'acc': 0.6875, 'step': 988},\n",
       "  {'loss': 0.6448593139648438, 'acc': 0.84375, 'step': 989},\n",
       "  {'loss': 0.8971076607704163, 'acc': 0.625, 'step': 990},\n",
       "  {'loss': 0.745664656162262, 'acc': 0.6875, 'step': 991},\n",
       "  {'loss': 0.4832969605922699, 'acc': 0.90625, 'step': 992},\n",
       "  {'loss': 0.7694334983825684, 'acc': 0.59375, 'step': 993},\n",
       "  {'loss': 0.964855432510376, 'acc': 0.625, 'step': 994},\n",
       "  {'loss': 0.724307119846344, 'acc': 0.625, 'step': 995},\n",
       "  {'loss': 0.730395495891571, 'acc': 0.75, 'step': 996},\n",
       "  {'loss': 0.6740803122520447, 'acc': 0.75, 'step': 997},\n",
       "  {'loss': 0.9241020679473877, 'acc': 0.6875, 'step': 998},\n",
       "  {'loss': 0.6531687378883362, 'acc': 0.75, 'step': 999},\n",
       "  ...],\n",
       " 'val': [{'loss': 2.3039082025948425, 'acc': 0.1, 'step': 0},\n",
       "  {'loss': 0.8263147678999855, 'acc': 0.6899, 'step': 1000},\n",
       "  {'loss': 0.6541948277538958, 'acc': 0.7739, 'step': 2000},\n",
       "  {'loss': 0.5758327910313591, 'acc': 0.7991, 'step': 3000},\n",
       "  {'loss': 0.5468728757037903, 'acc': 0.8082, 'step': 4000},\n",
       "  {'loss': 0.5073736724666894, 'acc': 0.8215, 'step': 5000},\n",
       "  {'loss': 0.4917114607918377, 'acc': 0.8221, 'step': 6000},\n",
       "  {'loss': 0.4785667320790763, 'acc': 0.8275, 'step': 7000},\n",
       "  {'loss': 0.4721719442655484, 'acc': 0.8294, 'step': 8000},\n",
       "  {'loss': 0.46677704088794536, 'acc': 0.8355, 'step': 9000},\n",
       "  {'loss': 0.45437879665210223, 'acc': 0.8395, 'step': 10000},\n",
       "  {'loss': 0.4441588194892048, 'acc': 0.8391, 'step': 11000},\n",
       "  {'loss': 0.4575867013523754, 'acc': 0.8411, 'step': 12000},\n",
       "  {'loss': 0.43960827612838804, 'acc': 0.8401, 'step': 13000},\n",
       "  {'loss': 0.42794082316156395, 'acc': 0.8478, 'step': 14000},\n",
       "  {'loss': 0.4184095841674759, 'acc': 0.8527, 'step': 15000},\n",
       "  {'loss': 0.42046910112563035, 'acc': 0.8497, 'step': 16000},\n",
       "  {'loss': 0.4092072703825018, 'acc': 0.8542, 'step': 17000},\n",
       "  {'loss': 0.403127591711835, 'acc': 0.8563, 'step': 18000},\n",
       "  {'loss': 0.3998056776559772, 'acc': 0.8577, 'step': 19000},\n",
       "  {'loss': 0.40141810498203334, 'acc': 0.858, 'step': 20000},\n",
       "  {'loss': 0.39141471624469604, 'acc': 0.8595, 'step': 21000},\n",
       "  {'loss': 0.3953735844348185, 'acc': 0.858, 'step': 22000},\n",
       "  {'loss': 0.3933157922741704, 'acc': 0.8632, 'step': 23000},\n",
       "  {'loss': 0.3887549810373364, 'acc': 0.8616, 'step': 24000},\n",
       "  {'loss': 0.3752188616143629, 'acc': 0.8663, 'step': 25000},\n",
       "  {'loss': 0.37593751703017053, 'acc': 0.8661, 'step': 26000},\n",
       "  {'loss': 0.37717498655612475, 'acc': 0.8641, 'step': 27000},\n",
       "  {'loss': 0.36906615842264684, 'acc': 0.8679, 'step': 28000},\n",
       "  {'loss': 0.3761823791712999, 'acc': 0.8654, 'step': 29000},\n",
       "  {'loss': 0.36633565069768376, 'acc': 0.8686, 'step': 30000},\n",
       "  {'loss': 0.36044838258062306, 'acc': 0.8706, 'step': 31000},\n",
       "  {'loss': 0.3659208789943887, 'acc': 0.8707, 'step': 32000},\n",
       "  {'loss': 0.35599575505946013, 'acc': 0.8736, 'step': 33000},\n",
       "  {'loss': 0.36100096276964244, 'acc': 0.8692, 'step': 34000},\n",
       "  {'loss': 0.35606103366651476, 'acc': 0.8726, 'step': 35000},\n",
       "  {'loss': 0.3694781718876796, 'acc': 0.8674, 'step': 36000},\n",
       "  {'loss': 0.35228067217543485, 'acc': 0.8735, 'step': 37000},\n",
       "  {'loss': 0.35233102308009, 'acc': 0.874, 'step': 38000},\n",
       "  {'loss': 0.34671953291938706, 'acc': 0.8748, 'step': 39000},\n",
       "  {'loss': 0.35050412498343103, 'acc': 0.8737, 'step': 40000}]}"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 36
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:38:06.671581Z",
     "start_time": "2025-01-16T13:38:06.330800Z"
    }
   },
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):  #sample_step是每隔多少步画一个点\n",
    "    # build DataFrame  列表套字典变df   set_index(\"step\")是将step设置索引\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "    print(train_df.head())\n",
    "    print(val_df.head())\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns) #因为有loss和acc两个指标，所以画个子图\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5)) #fig_num个子图，figsize是子图大小\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        #index是步数，item是指标名字\n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()  #网格线\n",
    "        axs[idx].legend() #图例\n",
    "        x_data=range(0, train_df.index[-1], 5000) #每隔5000步标出一个点\n",
    "        axs[idx].set_xticks(x_data)\n",
    "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", x_data)) #map生成label\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=500)  #横坐标是 steps"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          loss    acc\n",
      "step                 \n",
      "0     2.303467  0.125\n",
      "500   1.229242  0.625\n",
      "1000  0.606683  0.750\n",
      "1500  0.835389  0.625\n",
      "2000  0.610092  0.750\n",
      "          loss     acc\n",
      "step                  \n",
      "0     2.303908  0.1000\n",
      "1000  0.826315  0.6899\n",
      "2000  0.654195  0.7739\n",
      "3000  0.575833  0.7991\n",
      "4000  0.546873  0.8082\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzoAAAHACAYAAABqJx3iAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA1epJREFUeJzsnQecXGXVxp9pO9t732x6742EhNAkhQRQRAQRAVGw4ofw2VAEkU9QkSaCERRRLKAgiBJCQiAESEgjIb2XTdne+9Tvd9573zt3Zmd2Z3dmdmZnzv/3m+zu7JQ7M/dm3+c+5zzH4Ha73WAYhmEYhmEYhokjjNHeAIZhGIZhGIZhmHDDQodhGIZhGIZhmLiDhQ7DMAzDMAzDMHEHCx2GYRiGYRiGYeIOFjoMwzAMwzAMw8QdLHQYhmEYhmEYhok7WOgwDMMwDMMwDBN3sNBhGIZhGIZhGCbuMGMI4HK5cPbsWWRkZMBgMER7cxiGYRIGmind2tqK0tJSGI18bkzCf5cYhmFi/2/TkBA69MekvLw82pvBMAyTsJw6dQrDhg2L9mbEDPx3iWEYJvb/Ng0JoUNnzOSLyczM7Pf97XY71qxZg6VLl8JisSDW4O0LDd6+0ODti+/tC5WWlhaxoJf/DzMK/Hcp+sT6NvL2hQZvX3xv32D9bRoSQkeWBdAfk4H+QUlNTRX3jcUPm7cvNHj7QoO3L763L1xweZY3/Hcp+sT6NvL2hQZvX3xv32D9beKCa4ZhGIZhGIZh4g4WOgzDMAzDMAzDxB0sdBiGYRiGYRiGiTuGRI8OwzCxG+/ocDjgdDojWmdsNpvR1dUV0eeJ1+3rC5PJJLafe3AG9/iI9f0m1rcv0tvIxwXDxAcsdBiGGRA2mw2VlZXo6OiI+GKxuLhYpFvF4qIj1rcvGKhhtaSkBElJSdHelIQ5PmJ9v4n17RuMbeTjgmGGPix0GIYZ0LDE48ePi7OeNKyLFgKRWgzRc7W1tSE9PT0mB1bG+vb1tVCkBXltba34PMeNGzfkXsNQPT5ifb+J9e2L5DbyccEw8QMLHYZh+g0tAmiRQRn2dNYzktDz0PMlJyfH5GIj1revL1JSUkT06MmTJ7XXwUT++Ij1/SbWty/S28jHBcPEB7H5vxfDMEOCWF0AMf2DP8fIwO/r0IY/P4YZ+vBRzDAMwzAMwzBM3MFCh2EYhmEYhmGYuIOFDsMwzAAZOXIkHn/88bA81vr160XDelNTU1geL5HYsGEDrrjiCtH4T+/hq6++GtT7PXv2bFitVowdOxbPPffcoGxroh0fjz32WLQ3g2GYBIaFDsMwCcVFF12Eb3/722F5rK1bt+LWW28Ny2MxA6e9vR0zZszAk08+GdTtKUnrsssuw8UXX4ydO3eK/eGWW27Bm2++iUQn3MfHV77ylbA8FsMwzEDg1DWGYRifaFkaPkjDAvuioKBAJD+1tLQMyrYx/lm+fLm4BMvKlSsxatQoPPzww+LnSZMm4f3338ejjz6KZcuWRXBLE+/4YBiGiSZx7+gc2PgfnP3FOcjfszLam8Iwcb346bA5InbptDkD/o6eO1i++MUv4t133xXlZlTiRBcqWaKvb7zxBubMmSNKmWjRe/ToUXzqU59CUVGRmNNxzjnn4K233uq1dI0e5/e//z0+/elPi1hhmr/x2muvDfh9ffnllzFlyhSxTfRccmEueeqpp8RzUPQtbefVV1+t/e6ll17CtGnTRExuXl4eFi9eLJwPBti0aZN4P/SQwKHrA9Hd3S0Erf5C2O12vxfaL0kEywuJg7Yum3Zp77aL/Zq+6q+PxIWeW78tgS433XSTdnzQDKCcnBzt+Hj99de144NKBQ8fPoxPfvKTXsfHmjVrvB6P9lkSj/Jnepynn34aV155pXZ8UJlhMNtG7+mXvvQlIVBpn54wYYJ27Onfazr+5DFDwz6/+c1var9raGgQDhNtMx0zU6dOFcdnb89Ljx3oMw7m0ts+EguXobp9x2ta8IXff4i391XG5PbFyoWI9jZE+vUh0R2dzo42THQcRwdic7Izw8QDnXYnJt8TnbKffT9dhtSk4P4ro4XRoUOHxALnpz/9qbhu79694usPfvAD/OpXv8Lo0aPFAo+mra9YsQI/+9nPxKLpz3/+s+gDOXjwIIYPHx7wOe677z788pe/xEMPPYQnnngC119/vZjFkZub26/XtX37dlxzzTX4yU9+gmuvvRYbN27EN77xDSFaSLBt27YN//M//4Pnn38eCxcuFIu49957T9y3srIS1113ndgOEl2tra3id/0RhfFMVVWVWOzqoZ9JvHR2doqFtC8PPvig+Gx9ocW976wccjuKi4vFMEuawUKQqFnwyIeIBpvuPBcpSaY+b0fHxP79+zF58mTcdddd4roDBw6Ir9///vdx//33C/GSnZ2N06dPi9I/Om7o+HjhhRfEiYEtW7aI+UEECYWuri4vx5PeQ7rcc889QvTccMMN2LVrlzjmeoMWNeQQPfvss+JY2rx5M+644w6xLbSPE3/4wx9w991349577xVClp6XbkdfaVsuvfRScSxIR49emxSw/qDPjvYHEnYOhwMDZe3atYhlhuL2rTtjwPsVJjHUtXWyC9FkKL5/8UBHR0dQt4t7oWO0KEO+LAhO+TEME79kZWWJKfW0MKWFqH4hR4u8JUuWaLelxRT1fUhokffKK6+IM8C33XZbwOcgEUIig3jggQfw61//Wiz+aJHVHx555BFccskl+PGPfyx+Hj9+PPbt2ycEFD1HRUUF0tLScPnllyMjIwMjRozArFmzNKFDC7OrrrpKXE+Qu8MMHFr433nnndrPtDimBf3SpUuRmZnpdVta3JNQJqdDDpo02wa+UA6VjMyMoE4G0OugY4OOEwpoIFFAgkbu/yRkJLRfnXfeedrPtO+RK0ohD+SiyDk09Pr178/NN98snBmC9uXf/e53QlwFc3yQ2JTQ/vzxxx8LR+jGG28UbhEdM/QZfe973/PqOZKClE4e0IkNOpaI6dOn9/p89DmS6L3gggsGNDCUxBktMun/FRo+GmsM5e3b9voBoKICTe4UrFhxYcxtXywQ69sXKsGWjCeA0FHOzFmhnFVjGCb8pFhMwlmJBHQmtrWlVSzW/A3wo+cOB3PnzvX6mc7Gk5tCJTtSONDZXRIYvaFfPJEQoUVeTU1Nv7eHFn/6hSVBC0tKsaJSJPrjRYtNcqBokUgXWTJHAo1EEi0GqSSLFuNU1tbXWfNEgURudXW113X0M31W/twcglwLuvhCCwjfRQR9PrTwpv1V7rNpVovXMdLXfh1O6Bih7QkWWdYpvyfmzZvntZ2Bjg8SePrbyfdBQvum/JkEOr3ndXV1Qb0HFDZBjg4dg/Rc5LjQPk7PQY9x9uxZ4eT4eyxyjYYNG4aJEycG/T7Q49Bj+/uM+0Oo9480Q3H7alq7xdfqlm50OoHM5Oht/1B8/+KBYF9T/AudJOWPVhILHYaJGLQYCLZ8rL/QgtCRZBKPH8kFIYkSPd/5znfE2TAqZ6Oz27QAJrEgS5GC/c+X3ht6DeGGFokfffSROINOZ6upFIgWnpR0ReU8tO1U7ka/oxK6H/3oR6KMh0p2Ep0FCxZg1apVXtfR+0XXD9YxMlj7dbwcH1QaR89JfWr0OdH+T6WZsq8qkECV9PV7ZmhR1dylfX+kpg2zh/NJHMY/sf+/a7iEjptL1xiGgShdozPuffHBBx+IEjFySeisMbkAJ06cwGBBSWC0Db7bRGU31Cgue0HoDDYt+OiMNW3f22+/rS0gyQGifogdO3aI102ld/EIuQsUE00XGR9N30v3jcrOqLxJ8rWvfQ3Hjh0TJU5UukihDv/4xz9Ez0eiE6vHBz0f9aJRnxqVyZG4os9QQsKH+ofWrVsX0GmlMjzq0WOGPpV6oVPdFtVtYWKbuHd0TKrQSeYeHYZh1KQ0cjZoUUY9FIHOJlMi1L/+9S8RQECigXplIuHMBOJ///d/RZIV9UZQGAGduf7Nb34jFuXEf//7X7HQo/4BKkkjh4K2j9Ko6PXRgo9K1goLC8XP1LRL4ikeoWAGaoyXyF4aShGj1DAqrdKXHJKrRSVXJGwooIJKmiiti6OlvY8PmWYWC8cHPR8FgtCsI/r8KISD3Et9MAg5miRiaZ+nuHHqMSKB9K1vfQsXXnihOFY+85nPiF4eEkokcmnb+9s/x0QXu9OF2jaldI04XNMa1e1hYpu4d3TMSboeHU4cYpiEh8pfyBGhZClKcQrUc0OLIRIQdBaZFnO0CJ49e/agbSc9F7kMVLJDKXFUmkaBCXQWnaDyNFpofuITnxAChpKk/v73v4toXep7oKQoSo0jB4iSqKjkpz+zZoYS1HBOi3LfC4kcgr5SiZ/vfcjpotQtihKX72uiI48P2udIDMTK8fHVr35VhGuQ6J8/fz7q6+vx9a9/3es2JGyph41OBtBxQEEdFIOtj2unkwcUFkLHPzl6wbhXTGxB/Tn65dzhGnZ0mAR2dMxWJfbTaHDD6SJXJynam8QwTBShhb/vvBR/i1w6sy3LwCQyTUpCZ731A0P9xTc3NTX1a7Guh84+08UfixYt6rF4l5DwWb16dVDPyzD+jg+5X5NolilpAzk+9IRyfFAQxB//+EdxkdA2Ury1ryCiiz8oSZHCDJihTVVzp9fPh7l0jUlkR8ekCh2B3VPTyTAMwzAMwwzN/pxxheni65mmTrR1Ry++nYlt4l7oWCxWuNxqrKbD+ywAwzDMYEG9A9QT5O9Cv2OYRIaPD6a/iWuTSjKRn65U6Rzl8jUmUUvXLGYTumFBCmxw2djRYRgmOlB/DfU/+MN34CTDJBp8fDD9dXRKspIxrjADdW31ok9nRnl2tDeNiUESQOgY0YUkIXQctg70HPfGMAwTeSgJii4Mwwy946OyuRMr1x/FjQtHYkyBUjLFBKaly47H1h7G5+cPx1i1xCycnwVRnJWMTrsTm47VD/nktdYuOx5ecwhXzirDzCAEW6fNicfXHcZl00owbVgWBpsOmwO/evMQLptejDkjcoO6Pb2+S6cW45yRfd8+nMR/6ZrJIBwdwtHdEe3NYRiGYRhmiPHPbafxp00n8bt3j0Z7U4YEf9tcgWc/OI4fv7onwo5OelzM0lm1uxLPbTyBX6/zpAT2xh83HsfKd4/ikbUHEQ3e2l8jPt9H1gY3l+rtAzX4w/vH8eCq/Rhs4l/oGI3ocis1nA4uXWMYhmEYpp80dtjE14NDfEE9WBysUhyWzcfrUaebeRPOHp3irBSMLcwQ3x8a4o7OmUbFpappDW6d+sbuKvG1uiW8722w1LQo21kT5PPL2x2qbvObvhhJ4l7oGI3k6ChCx2njMAKGYRiGYfpHW5eS6nWkunXQF2pDEVlK5nIDa/ZWh+1xHU6XmKOjOTpFiqNzurFTlEcNVaRLVd+mCOreONXQgd1nmpXbt0dH6NS327y+9n17ZTspHa9KFUmDRdwLHcJmUErXXDYuXWMYhmEYpn/I+OJ2m1NblDL+cbncOKJLQaOyrHBR12aD0+WGyWhAfrpVXHLTksQA0WO17RjyQqfd1qeQ1r+fDUHcPhI0qIKMnE76PPq8vU4QDfbcowQROkoEgZNL1xiGYRiG6Sf6OS2Hqod2mVSkIXely+4SYoSgsAD9QjccQQRFGVbt8WXYwVAOJJCvy+ZwCTHdG6v2KGVrhN3pRmsUZgjVq58naawmtayz19vrnKrBPn4SQ+iopWtuLl1jGCZEaCL8Y489FtRtDQYDXn311YhvE8MMxeNjKNGqlq4RereC6YkUHOOLMjC5JFOc8V+7z7M4D09/TrJ2nQwkGGynIFyQI6N3CaVb4o/TjR34+FQTDAYlbKuv20eKBl3JXDAiVn+bwT5+EkLo2A2K0HHZ2dFhGIZhGGbgjs5QXVAPFjTTRgqQy6aXiO9fV5vnw5a4lp3SU+gMUQFKjkyHzsXpre9mtermzBuZi8KM5H71yYQTvXAJ5vm9StdY6IQfu1EpXXOz0GEYhmEYZoBhBEO9RGowkEKQBMjyqcXi+41H6oIqceoL2chekqlzdIqU5LXDQ7SkULpUwTgksj9nxbQS5KcrJ/HDVRbYH/TiJpjn19+ePqfB7CtKKEfH7eDSNYaJCPSflq09chd7R+Df9eM/zKeffhqlpaVwuVxe13/qU5/Cl770JRw9elR8X1RUhPT0dJxzzjl46623wvY27d69G5/4xCeQkpKCvLw8fOUrX0Fbm+fs1vr16zFv3jykpaUhOzsb5513Hk6ePCl+9/HHH+Piiy9GRkaGmBQ/Z84cbNu2LWzbxkThGOltvw7nJchjZLCPj0ceeQTTpk0T+3t5eTm+8Y1veB0PxAcffICLLroIqampyMnJwbJly9DY2Ch+R9v5+OOPY/z48bBarRg+fDh+9rOfIVIDHfVnpDl5LTBHVCFIiWijC9IxsTgDDlG+Vh02R8df6VpFQwe67L33t8QivuEWgRwS6uP5qEIpW6PBmxTC4FtGNhjYHC6vUs6+HB2704XmTs/x09LlQK2anDcYmJEAOIzKzgB2dBgmMtCC7YHSiJ2N6XVO9A/PAklpQT3WZz/7WXzrW9/CO++8g0suuURc19DQgNWrV2PVqlVikbVixQqxWKKF05///GdcccUVOHjwoFhEhUJ7e7tYpC1YsABbt25FTU0NbrnlFtx222147rnn4HA4cOWVV+LWW2/F3//+d9hsNmzZskX0+RDXX389Zs2ahd/+9rcwmUzYuXMnLBYlUZIZesdIn/t1OAnyGNEfHySqI318GI1G/PrXv8aoUaNw7NgxIXS+973v4amnnhK/p32cjlMSWSRozGaz2DanU1nM/vCHP8QzzzwjBNMFF1yAyspKHDhwAOGGekz0DeK0yKOI4yKdq8B4EtdkaZKccbN8agkOVLUKN+Kzc8tDevwqtWm/JMtTulaQYUVWikUspil5bXJpJoYS8jX15ZDI2TlzR+SIfS83zRqV0rVGH2eurx4heXv6UzY8NxUn6zvEPlI4SMdPgggdtXTNwUKHYRIZOiO8fPly/O1vf9OEzksvvYT8/HyxsKOF14wZM7Tb33///XjllVfw2muvCUESCvScXV1dYnFIZ7CJ3/zmN2Kh+Itf/EKIlubmZlx++eUYM2aM+P2kSZO0+1dUVOC73/0uJk6cKH4eN25cSNvDML0dH1LoRPL4+Pa3v+0VYvB///d/+NrXvqYJnV/+8peYO3eu9jMxZcoU8bW1tVWIJLrNTTfdJLaNjptFixYh3HTaPWevy7JTcKapUyRHsdDpydlmmmfjFI3yI/NSxXWXTS/Go28dwvtH6oQYIVEy4Mdv6uno0MkgcnW2nWwUZYVDTej4OjoBhc4eT9kakSdL1wY5jKDe5/n6cpTk68lJTcKEogwhdOj4OW9sPgaDBBE66gHBQodhIoMlVTlrHAGoPKWltRWZGRliMeP3ufsBOSPkmtDiic5K//Wvf8XnPvc58dh0xvonP/kJXn/9dXF2mFyWzs5OITJCZf/+/WKRKEUOQaVp9ProjDidkf7iF78oXJ8lS5Zg8eLFuOaaa1BSovxRu/POO4UD9Pzzz4vf0dl3KYiYoXeM9Llfh/u5+3l8kAgnyF2M1PFBZW8PPvigcGFaWlrE49HJgI6ODlGqRo4O7eeBjqfu7m5ceOGFiDQd3YqbQ4v3KaWZQuhQH8r54woi/txDDenmjM5Ph9lk1JwdEiL0u3X7q3HV7GEDdouqZY+OTujIMjkSOn/fUqH1CFlMRlw9d5gQp+EYVPqPbadxyaTCsAvcSlW8pSWZhHPob2govW56fQSVrRGe0jWb3/Kyv285BXsEOjZ8n68vR0kKMdpe+pzW7Kse1ECChOjRcaqOjoGFDsNEBvKkqTQmUhdaqAX6nVraFSzkoFB9PS3WTp06hffee08s7ojvfOc74gz1Aw88IK6nhRb1EFAZ2WDwxz/+EZs2bcLChQvx4osvit6DDz/8UPyOFph79+7FZZddhrfffhuTJ08W28oM4WOkt/06nJd+HCP64+P06dMROz5OnDgh3Mvp06fj5Zdfxvbt2/Hkk0+K38nHo162QPT2u3Ajy9Yyki0iMnkoJ3xFmiOqyBhbpPTNSOTi/L3DdQN+7Lr2btHrQ+NzqFxNz6QSxcX58FgDfvPOEXEhF+mh1eEpZXxlxxn88JXd+O5LuxBuKlXxJl+DP4fk/cN1otVuZnm2VrYnhY4/obFmXxXu/c9+/OtE+Jf5vqlwfYURyO0TQkctZ5T7yWCQGELHpOwMLHQYhklOTsZVV10lnBw6Wz1hwgTMnj1ba3wmV+XTn/60WMAVFxeLBVk4oDI0ChSgXh0JPR+dKadtkFAfzl133YWNGzdi6tSpooxIQsLnjjvuwJo1a8RrIGHEMJE4Pmi/IwESqeODhA25Wg8//DDOPfdcsW+fPevtCpMIWrdund/7U+kmiZ13330XkaZDjZZOt5rFGWl9wz3jjUykkwEBklH5ipMdShO6TCcjkUNujZ7PzB6G2y8Zhy8uHCkuiycVietP1HcgHOw50yy+fnCkLuwpZ7JHh9xCwt/jk4tIULCDJK8XR4fKw8T92vt3IjAY5PPJEkR/DpS/29P2yuGuh2oGL3ktQYSOYjMaHIObTMEwTGxCZ6jpjPWzzz6rna2Wi6d//etf4kw1iZLPf/7zPRKoQnlOWkRSP8GePXtEUzU1ft9www0ixer48eNC4JCjQ0lrJGYOHz4sBBKVB1EPBKWy0e9owUmBBvoeHoYJF7SvUvgAnQygYyASx8fYsWNht9vxxBNPiCACKslcuXKl123oeKD9nEIKdu3aJUrcKIyjrq5OHEsUXHDvvfeKvjdKhCP38w9/+AMi5eiQ0NEWatWcvNb7DB3Pgrwv96H/iWs93bw0qxl3LBmPn3xyirj8zyVj/UY3h/q6wjn81Pd1TSnNEl/r/AgHf2lz2nva1u03oY1othvQoks8CwdS2EgxW98PR2dMQbowmJs67IMWopAQQsclS9ec7OgwDAMR8Zybmyt6Y/QLOUpvooZsKh2jEh7ql5Fns0OFeg7efPNNkWJFsbxXX321CESQvRD0e1rIfeYznxFntyl6+pvf/Ca++tWvipS1+vp63HjjjeJ31LtDTeP33XdfWLaNYfwdHyS0r7vuuogcH9SvRo9HQRzkXJKoon4dPbSvk+AnUUWx65RY+O9//1ukrxF33323OEaorJNE/7XXXivSDMNNh011dJLN2kKNmur9LUgTGRJ+siRJOl+SPDUhLJQoZCla9DN0AiEFQU1rl+ivCRV9qWK4hp/KQbQyqlmGKPhzaDxpc8k93lMSDL6iWy/wjtZ6qgjCgRQo8jOmVDXqnwqE/Mzz0q1ISTKJ5LXBHLybEGEELtXRMbLQYRhGjbX1LZORyU/U/6KHFlJ6+lOq4/vHh8p9fB9fQq5OoJ6bpKQkUWbHMIN1fFB/DgUE0MymSB0fVIZJFz3kcOqhsAFyMANtJ/UN/fSnP41ooIMUOhlWM5ItJk9EbnVrj16RRIaGebZ2O2AyUuKad5x5rm64Jf2/KGPz+4M/VyMQ+WlWmI0G0dNT29btFUfdX2jQqb7kTg4/TbOEXhYmBUlGshnD1ZS6TrsTnTanEAW9uVnyPe12uETSHblavrcnjtS2Yd6Y8AVnSOFCol+6XC1ddmSnJvVZuiadIDp+qPxzwZg8RJqEcHTcZuU/IqOTS9cYhmEYhgmedjV1jRwdfckOBxJ4I8/QU6x0ktl7eSkXuXYnLYo9cd39wZ+rEQij0aClo8lI6oFyRP2cS7OSwzr81MulykoWQpqS/fw1/JOIlLeTUEqbfJ99XSAvoVMTXkdHPheJRxJoyvYGdjel8ylL7eR8JSr/HAyMieTomFjoMAwTJqjUhqbD0xnvYcOGia/0M13krA+GSfTjw99lqB0fWumaesZ8nJa8xoEEeqTwk8l0esgJo4U5MdBmfrl4LwkyLlqKglD7dLS+o6IMXKbOsKHhp+FA9tKQU0Mul7/IaHJ3qKfF3/wgKSD1QqPL7vS6/5Ha8AoKfc9Nb4EIvTk6g3n8JETpGsyq0HFx6RrDMOHhk5/8JObPny+asWm+CC3gZPkMDf9kmERGHh/+GGrHR0cgR2cQI3KHAkcCJK7pS63aGzpF6ZNMYesP/lyN3pCiQIqJgULDLeXrWj6tBA+vVYafhqPJ37fviPpuqlu6vYSLfN0kFMn10UNDQ0kA6nuf5KwhyeEIOTr03CR2KNmut+Q1eXtZaudJLuQenbCXrpmc3DjIMEx4yMjIEBcx+FHtZYj44EeGGWLHRzzQYVfn6EhHR84C4dI1L2Qp0lg/jg6Rm2bFqYbOPuOI/UF9PVqfSpADO8Pl6MjPmRbolLo3vihdvNa3D9bCf1dK8Jz16Tsi8aAfsklUqtHSdBvf3iZ6Twn9eyrfp9w0Cxra7eLn1i67mAMVKhTsIN0lEjny+QM5OtS/Q2EF8vaETC6kkja6n7w+UiTGX2WzYnOaXVy6xjDhhONV4wP+HCMDv6/x8flRMpa+dG1MoeJG0Fl3f9G+ifpeUThDb45OMGVOgaD72BxKeprsvekL2bgvB3IOFOncyd6S5VOV8rU39oTep+Pbd+SvdE0r2fMTqODvPZXCbnxhOjIt7rAmrzWqIof0Vk6qvnTN/3FAoQ3yv0G6PZGaZMawnJRBO1mQIEJH2YFY6DBMeJClJx0d4RnGxkQX+TkOtZKiWIWPj/hAfn617bJ0zRKVhdpQgFLJKGTAaPAMB/UllFk6crGfn27tEXQQCAoPCNXRoTQxWTomnYjLpitC570jdRhgrkLAJDl/75F8fn9pc70JI3K+ilMVlSFFaKjI58lOsYh0PVmOFugz1Q8X1Q95Hcw+nYQoXYNFFTpuLl1jmHBAc12ys7O1mRU0A2YgcaHBQKVhNpsNXV1dMVkaFuvb19dZWFrM0edInyd9rszgHB+R3m9orkWn3YGUJDOMAzg2B3u/drndouk6NckU1P8ldPv2Ljs6Om3ocrWJM8y0yE5LsojEreCez4EUi7nH7X2Pi8bORi9HRy7UTjd24pUdZ3A2QA+I2QCo7T0Rx+50YcOhWrEwl1jNJlw4vsArdjhSyIb9EXlpIngg3I6OPp0sWIrDIHSkkCXRQIt1+dmPKUgTLsmeRgOuGvCj6/uOFOHszyGRPUb+XrtfYaQFHCSjIQU41OxfkG8/2YCxBRnISg3+BJdMg5PP29dnKrdL3k5CwQ7vHKwdlD63hBA6Botauua2Ay4nYOQ/5gwTKsXFxeJrJAb0+S46Ojs7kZKipNLEGrG+fcFAizn5eTKDc3xEer+hmvzmTodYnMkI2Fjer9u6HGjqtCMz2YxMdUEZzO19yUwxIzOIXoRgnk8eF21dh8XP+vdxfLGyUHth6ylxCcTiUiM+jchDgut7L+3qcf2XF43Cjy+fHPHnP6ome8nZKv7w5z70VxAEW7amFw/UnE+9IuRA9Bd/A1DpeKDytd+8cwR7Gwd+bPhLU/PX8yKFmj9Hx5/Q0LtE9Smqo+MjdFbvqcLX/rIdV84sxWOfmxX0NnsS1KzeQitA35UWROAjdKQ7xo5OmDCqjo7A0QUk9T/tg2EYb+g/+5KSEhQWFsJuDz19JhD02Bs2bMAFF1wQk6VVsb59fUHbzE7O4B8fkd5vfvXmQbyxpwaXTy/FHUtGxfx+/Ys3DmDNvhoUZiTjb7fO71NcPbr2EP67qwbZVjdGF+WIhdbJhg7hYNxzxfg+n+/hNQexancN5ozIwS+vHt/rceHbo0N8Yf4InGro0Kba+0Lbs6+yBScHqbLtRJ3Sg1GWnYLRBWligbn3bAt2nmoalOevaVHO9JdmBxYioZSuyc9AuirBQMNcSdzQ3BvqpSrsh0jyTVyTC3OJFD4tIfzp06epkeAO9B5J4VLqp0en11K3TCvqZemaj6D410enxddtJxW3Mlh8hUtfn6k+ilrP5JJMcexNLctCpEkMoZOkFzrdLHQYJozQYiCSC2V6bIfDgeTk5JgUErG+fUxsHh+R3m8q25w40+rEySa7eI5Y368P1XeJ7T3T2o6Ddd2YWZ7d6+3pddHtz81z4uefm4O3DtTh63/9CAdqu4J6vYfqusX9Xafa+rw9uWP6eGmiPDcVT10/J+B9dp1uwid/8wGqOgfH5W1W3a2r5wzDHUvGY39lC5Y//p7ozSB3LtKuXKAFrR4tUSxA43pvdKhCJ80a/N8aEjmFGVYhFCjdbCBCR5uhowYRSKTg6nQYwjBDx5OmJt8jvUPSq6Oj3d7znsoBqVRuV69qI0q7o3lQ1F9GonH9oVpxPZVftnc7gi5v1IZ/qs8rnZ1An6lMj5PbKSGB8/LXF2IwGFoF5QPEbLbA5lYPDntoeeoMwzAME+u0qgvDgQ5nHGz0k9zfCGIYo3xdGZaB9WPI29Hz6vtafCGRIN0E3xkmvSFLuFrtBi1edzCEjlyAUyAAVWpRQEBNa+SDmORC17cXQ4+2KB5AvHS7TWl2ooV6f/DsF50hR0vrke9zRwhhBJ6+o5SA5X00/FOKSP89Ot6lbpRMV6eKHnrt6RYlZpo4qs7TeftAjZZgJ67vx0BR389ZCh56fn8pk/L2kY6QRqILHYvJgG6Zdk6lawzDMAwTx7Spi3fZPBzL0AJJL1BW7ansM5pbvi5ayBGl2Wo/Rmu36MfoC/0Qyd6S0zrtTsiH0zs6fUFnyIepZVxHwjywMRihQ4EAI/OU6pXBaPj2lDQpC29/yMVuXYBFcW+Q60Ck98PR0YsDvZAOFhK4Z9QZNr6R2Zqj4wxf4ppeQNBzdzucWklgssXot2xPvqcdNqcQRXJYaJLJiFw1ZGCsKrpl+ZrviYT+7B++pWtye+1Ot3ZyxX8YQeD9ItIkhNAxG43ogrqDsNBhGIZh4py2IeTokOtACzW5oKMymz1nWnq9j3xdaeqcEIodplIlEjnyjHZvi2Z6Tt+Gc3/IHhxyR1ICpIkFYoy6OD7SjzPmA0W+Hv1ieDAbvvtTukZugnRoIu7oZKYMOHntqCqAqdcnW50BI5Hvc5dT2ecGgr80NQrSkKEJtI97buM/FIR6e+hkvvwM9FHU8vZj1blPVIZH5WvvHFQCUmYPz/YbVNAbsqROfs4kqCkpMZBTp4UX+JSuDSaJ5+jYWegwDMMw8Q2lihGULEbTzGMZuQjNSbXgExMLNVen1+nsqoORrq57aXFYlGEN6uy9XAxKehMCUuhQEEF/+1zGFqQNmqPTIh0dXVSwLLfqz0J2oASzoCWRQkJ2IOVrA+nRCdXR8fTn9EyS0yf19Vb62Bv+em8o6lyfZOYJFvDfX0T7pFbu1kbCqOdjjpOCt7oN7xyoRZfdheG5qbhyVpm4/kg/hLD8nOnEQo8+IT8nVQKlrg0mCSF0yMLrdktHh3t0GIZhmPhGlpFQhZCcZh6ryDk0NMl+xTR16vzuwOVr9Hrkr9T2A/X+6qJWLTcKhO/Z/d6EgNafE0RktS9jB9HRkaVr+mht2UDfm2MVDoTwVPexvha0soSpvyWV7TbHgBydErV8cCCOjhyy6U/o0PBLSksjWjoH1qgjRYlv740+MjrQbfTk6t5T2Yukv/1YtXSNBI08gbB8WrG2fxwKoXRN//z+3GMtvICFTmSxmKl0jXt0GIZhmPhH30A/FMrX9MMgL55QCKvZiBP1HSKeuc/p7DqTRTZ193X2Xv5ehgv01qMgnbGBzCIaLEeHPm/fHh3x/OoC/VCNkrwWKaSQJsMrx6fEK1yzdGRp44AdnZb+n+SWAnhskXfimq+rI9/7ATs6anmdv/eot8S13oWR5zHHqqVrFL/+9n6lbG3F1BLN8TvV2CFm+gQzhFgGa+hDJ/wNOe15+yHSo/Pggw/inHPOQUZGhpgNcOWVV+LgwYN93u+f//wnJk6cKCIcp02bhlWrVmGwS9c0ocOlawzDMEwcQ4tC/bo21gMJ9OU21MR/0YQC8fMbu6v6mM5u8Z+w5VOa5os8633umDzxlRrOZbO7L23daolcPxLXfJPXKPWsOYKuGvWvyD4RvdCh5yfxQW7LQGbXBIuX8OxjKOdAZ+nIz6f/qWtqSEVzt1h49wdZ0jjej6NDyNk3zQMoXdOnqfnOHtK/R2dVd7J3R6enMNLfPi8tCdmpFvF/AoVr0Kyl6cOyRPkZ3ZeuDyZ5jcpF5VuY4+Xo+P9MqaRP7pc5PsdqzAqdd999F9/85jfx4YcfYu3atWKg2NKlS9HeHvhsxcaNG3Hdddfhy1/+Mnbs2CHEEV327NmDwcLiVbrGQodhGIaJX/RuztBwdNTFnNqHIMvXVgUoXwtU9x9sPwbNVCEmlWRqvQaBkte0Hp0BODrkAmUnKdt/pDZygQDSUaAyfdkDQ6QkmVCek+o1+DISyBkuwZQn6d2HATk6/RQ6NEeHxJ7N6eqXuKKmfZoxQ4zrw9EZSOlab2lqeofEEy7Qc1ioX2HkxwEyGAxe5XcrphXrggpkWVvfQkc6NkoAgrHn9vr0Xcn3m5xTq9k0NITO6tWr8cUvfhFTpkzBjBkz8Nxzz6GiogLbt28PeJ/HH38cl156Kb773e9i0qRJuP/++zF79mz85je/wWBBHwiXrjEMwzCJgFycx5rQobPN/oSLbwP1JZOKkGQ24lhdOw76WaDL1+NbJhXszBT9We/xfTTsS9E4EEdHbFOKOpl+AH0ygd4vX6RbRAtv38AE+fp8F7L0uMdq23GyjYabNuPjU03Yd7ZlQAli/YkQHmjpmubo9LN0jdZ/BaqY7atP53hdu3gf6LJ2X7VwOmgRH0jAZUlHZwCla72lqel7XoLp0dELDX89OsRY3cDT5eqJBK+gAj+BBDWtXbDrgkxk4lqeLoigh6PjcgLdbUBbLdqqjyEfzShJcyvNglFiYEeuSnNzs/iam5sb8DabNm3CnXfe6XXdsmXL8Oqrrwa8T3d3t7hIWlqUOl1ykOjSXwxupyZ0nF3tcA3gMSKJfE0DeW2DAW9faPD2hQZvX3SJ19cVz7T6lNLop6xHi79uPokfvbIHD141DdfNG97r4EQSFReOLxCLzTV7qzGxOLPXiNv+Ojp6YUULvY1H6wMmr4XSoyOeIxU40Nz/5LPVeyrxtb98hO8um4BvXjy219t6+nN6biMtcN/aX9NDaL328Vnc/sJOsQx8ZPdm7fpvXDQG37t0Yr+2tT8RwnLAZH/2SRJlA3V05H5B5YMkLqYNy/J7m7f2VeOWP2/rcb10PHpzdHxPLATDKdUtKspURQMJgfZaoOEY5jZvwZ3m7Zh7tA2lnenYYRyLUvMM+oR7fU9JmCjDYd0oNTXDULELyfZGL0FTmpWMWeVKrLT+eq9Agu5WHN70H3y47l+YluvGzNJUwGnH6KYW/N3SiBx6iqetgMMmAr5ubG/D56xtSNlvB37q+b+HtngbHZIdAH5qAqwZ3pekdKBkOrD4J4hJoeNyufDtb38b5513HqZOnRrwdlVVVSgqKvK6jn6m63vrBbrvvvt6XL9mzRqkpio2bH+o6gAK1Tk6+3fvwNGawe0RChYqB4xlePtCg7cvNHj7okNHB/2VYoYSsVi69tcPK8TXDYdqAwsdXa/C3BE5QujQWfbApWsWQPfSpFCioYnUj0FRvf7Qn/WWjeaBksnC5ej0t3Ts3UO14uvfNlcI8dFbtLW/IIK+ztj/c9tp8TXN7EZ2egocLjeqW7rx0vbT+M7SCQHfu4HO0JHka25F8H1jNqdbbN9AHB0paD8+3dxr79Y/t5/SIs5lHxC5ijcuGBnwPvL9Fu+/06EIlbYqoLVa+Uo/O+2qm0Guhkv7PnNvJX5kbsGirm5gZQ3QcBywKfvgeXShTWgHFsrd7re/ArKHA2VzgbI5wLC5QPF0oLMR41u34EumdzH9VBW+aTmJcYYzyPqdctwso2c7+2tcN2whWkvKMGH+cq99SZbldVQdBj7cBhxaDZx4H+Ncdoyjt5r8DMXTAHXOFdB1tLud9bwPdNSl+NldHEYrjE4bjAZ67U6gq0m56HFG/v+mAQsd6tWhPpv3338/vFsE4K677vJygcjRKS8vF/1AmZneZ3aC4Uh1M3bu/aP4ftK4UZiwaAVi7YwpLZKWLFkCiyV6DVuB4O0LDd6+0ODtiy7SUWeGDtKFiBWhc6KuXUtQ83U2yH2SUdj6WSGyDE02Ywfs0dG9NBrsSOtzmtJOi2/62V8TuEwJK8lMwbhCu5ZM5g+5benWgR3bxalqj04/HR3pwFBQAi3SZ+rOwvsi57joZ7tIZLKW/vnp/dt0rF58f+c0J2686gK4DEbM/b+3hCOwvaIR54wMXKnjixQt+iSucJauUb+MJLWfQ1v9pvF1NABVu4G6Q0ByFjpTS3Hg4HEYkY2/3nIuJpf6WWdKx4XuU3dYXG44vhNXJ53G8J2twDZyToIvz1oqV+AN+msNQHY5mlLK8d9TyTjrzsMoQxXOsRzDSPcZoKlCuez9l9djnUMX+uhduoYUgxHujFKg5QwMDUeR0nAUt9P1q38ObBsPjFwEDJuHmad24a2kVzG24yyw2vOYJ1GMdY6ZOO0uwKfPGYVpwwvw5oEG/GdPHeaNLcaNi8YDJjNgScXBege+/o/9yMzIxKvfXgJYUgBzMla+cwQPrzmA62fl4/+WjxROEWytyldxaQNSg9/PBlXo3Hbbbfjvf/+LDRs2YNiwYb3etri4GNXV1V7X0c90fSCsVqu4+EKLiIEsJFKtSVrpmsllgylGFyMDfX2DBW9faPD2hQZvX3SIx9cU78jFeaykrumHf5LosTlc4my53s2hBmdKXPNdnPo7C1+vX1grlTmefowMq3Am6HH9CR35fCkWEzJTzJrjQY3ntKD2TfVqCyGMgChSe8hpkU2iLph5PFSqpReENFOoV6HTi6Mjk99ongmJCxIaa/ZWiV6cySUZyE9W3kBqFl8yqQj/2nFGhED0T+gE7+hopWv+hA6JiYZjwKnNQMWHMJ3diYuaGpB86hf4T1I73AYTzM8+AhhNYiEPoxlIyQEyioH0IvUrXQqV7+l3jSdwXvcGFJg34uLdNcDeCqBVZ0eojsS7ZsBhNsH0j2GKc5JVrjxGW7Uqbg4BXaq1oTKa/qHdWB5utE1p9NxFnu0w0z5oUH4nnBSDiE5fe6AWaVYLrlt8Lgx5Y4Dc0crzmq2orW7F3Y9u0J5nXnku/nHTZODsDuD0NuDMduVrew1gMMGWNQrr6nNw2F2Gw65hSCqejIe//hk4YMKa1/6JZRMzYD61CTixAaja43k9254FBU+PNQJ2twm2svlIm3oZPrScg8+9XKc9f3V7CZ6cPRsbT+3Bf10nMbx0DDDeU96Ymt6BY+5mWDuMcKfkaI4RfcZuGJGemQNkUl+QpzdoMOnXkUsH37e+9S288sorWL9+PUaNGtXnfRYsWIB169aJMjcJnf2k6wc1dU0tXeMwAoZhGCaekYtzWnjSIjTajg4tnCVUgnSyvl0rmfE398O334bWHvpyG/3C2nvpqaRTkdA5G6AfQ3u+7GTxmNRYLd8nas6fWpblf2DoAEvXUs1K8hc5JeSqzBqe0+d9atu6vRrcSSj+YPnEgOVrvZWukXikOGFyhmgA5vzReVi1R2kdWD6lCGj3KEVKuyOhs3pPFX582eSgy9e0ninZpE6uw/H3lAW5OVk5ay8ueSh1pGGc4TQ627KUM/rVe4SowaktisDp8CywSUOIT6MLmCadijPoN0voopaCaeSMBAomim2oO3MEWfZaWAxOoOmkcvELDQoaAeSPF5ftbbl4YnsXSspG4MGblorXJ0RYHzzy9x14zXEWty4YBcOCyT1+77f3LDkLGH2RctE7TMlZaO824Ov3e0qnrygoBSzJVG4AhzkN7vGXAlOu8LhZJzcCJ9TPJ3cMHj45Cn+qHo3/m78In5xRin+99LG46ezh2fiooglvH6gRc3YClSjKn7sdLtFLJU9YaL1bURwWSpj7W672t7/9Df/+97/FLB3ZZ5OVlYWUFOU/qRtvvBFlZWWiz4a4/fbbceGFF+Lhhx/GZZddhhdeeAHbtm3D008/jcEVOsob7bJ3JcaUVIZhGCYhkYvz4bmpURc6FfUd2HOmRZSU0fbQ2WxqfJZCJ9BAxEK1SZvcHyo10y+uNKGT2lPoUET1x70kbFW19EylIldn8/EG0cfSQ+iE6OjIgY0kdA4HKXRkvxA1jtNrP9XQKd7DQI30vQkdmbwmhE5NGyYUZ2DjEUVMXDq1CPs2H9But2hcvuhFamhuwZ4D+zE93wAkpSnOCDWOBxBaptYz+LRxG+bv+hfwzhZF6ASAannWSqPtQX8PZgVKZwHl8+AomY0tO/chb9QkPLhqPwrSLXjoqqlKvwf1u1D/S0c90FqlOC/6r1IwmVPQlj0er1XloiZ1HL79hc8AhZOBZKU8jVy88+9/C912O964eSwmJDcBzaeU19BaqThF+eMUcZM7RhEQKvV7zmL91h2Y4sxQ3JsgoNLJdfure6Sf6clOTRJvtQwq8zsslG6gPmeW0S3mF8nEvN4S2kCCc9LlykWl7l+70FJ9SghhSllbs0/Zvu8sm4DvvbRLuJ3rD9YEDJ1ITTKJIb8kdOg2vkInGKcvkvTryP3tb38rvl50kaooVf74xz+K2GmC4qaNRo+UWLhwoRBHd999N374wx9i3LhxInGttwCDiAwMdatCx9bBQodhGIaJe6EzIi8VO081iQVHb835keQNtWzt3NF5GJaTIoSO0hivLPICxedSKVV+epIouaK0LLlYotehDyM47vN8xX0kr1X6mUZPfSxC6PgJJPD06IQgdAoo2a0h6D4dGVwwpSxLzMZ5fXelcHX8Ch2XE/a2OowwVGEsJZMdOQV0NokmdVFq5XLgy/YqnGOux6iPMlB90IQfGatRkGHCmA9XIe3EQZj+8rRoEk/uaMBHxjokJduAf/g8jylJETwpucpXWjCTW3NmO/7WdhziXPJR9bZUUlY6Gxh+rrIgJxdBXOrh7qhHU10VstCmNKmnFQDl85Xb0teSGWq5F+C221F7zAh7/nysd1kxISUDmHhBcG86iSB6D1Lz0NjUjR/+8h1RWnV7+XwvZ2z9wVoxRLM8Nw3jqRxL/C64iiNPGEHwqWvvHa4TA15pf585zH85IokWEvHSQZHzpQJBxzVFrdep84z0vW7BIKOnaf/fdLReDJilY2/+qDzh8j294ZhwAT0OjXdJKL2fNI+KxDRtc3luqk8c9RASOsHkuVNJmy+f/exnxSVa6EvX3Pbe8/UZhmEYZigj427JQSHoRC9NNY/GmVVZtkZnr7vUiGB9/4l0WPydtabrSOiQOzOlNKvndHafOTp6wRRolo6/yfHj5ELPjxBp67aHxdHpT/Kash1uzMpqx/TMNjj3bkHyR2/DbcqAgdK8Ws6q7kWVEDPCGKG1J6Uj90xIxiK60ObXKD9PoO9pTbwTKKUrdEFY8h11wAhTShYMtnYlGYsu5JbQxQeH24g97lEYN3850iZcDJSfC1j9xzKTjFj+wDrUtHTgtVunY+ro4QGdIomMlu5X4prJojke0h3s9uMOyv1zxdSSXpPt/EF9Zf7i3IM6HqaW9HrigbZRCp3ehoVKqDxMCp1eHR0/6JP55ImJZVOKheCSQodcKNlX5+//EbqOhI4+TS+QMBpSc3SGCsLRUQ9ft517dBiGYZj4d3RICND8FxI+tAAZbKFzurFDJIbR+nHZlCLsPdvSI8q5t4GI1LdDJVt6d0YupOh1yYXXgBwdn9I1gkp3As7R6Y+j014HVGyC8ezHGFlbA3OOC2VoxpGqXhZ8lEJ15iPg9FZ8+sAafNu6HwU7lPdrEX1stGb8IPDd29zJMKXmICUzH0jJVi7U12Gyorbdgdd218BkNqPLaYDdbcT1545GVpoVe4+exuS5i2BOLxBOTXdSNs5/YidqbEl49cuLMJNcJHuH4sh00qXR8313K1qzxmPBXzvQhlQcvnQ52RF9vj20H1LIRK0jpU+RI97OEGbo9OYOUhkZ9Z8QtKDvL9LRaelyBOWYdjucYl6P8nyBA7kI/bEajHDR395vqVsvyGQ+clulOJHvx4xhWaKE8mxzlyY4/Tk02tBQ1cUhY0RzXoeSozNUIZVu0xwdFjoMwzBM/NLW5XEh6EwvCR1agIwNro0gbFBTOzFvZC4KM5JhK1SmrB+ra4PD6YLZZOwxLNS/O+P5u62VwwQQbaXZgdPavCfSexaDY9WFXkVDh1j8JqsRxrRY0+boBHJ0qNKFmtdPbgIqNipf6w+LX5nUoYk4/Sd8kAx0d1ng+s0YGPPHKilbmaVAzX4lQatmnxZPPJf+oR4NgxmGrFIc7crAgfY0FJeNwpypk4CMEk/CWGoelq7ciUN1Nrxw07miRNCX5C477t+xRksHm1CUgW9dfoGIxj/esgqTpqygeEXxO5Ji8yY24b+7Kj1pb9SnQ5fs8h6PXV3TijZsEO4GVc8Eg1woNwQ5NFTGS1MvyEDx5w5S2Rot3imsYXqA/qfekHHetAtQiWOgHinJB0fqxO0onGJ2H71aejERlNDxun3fDpAeKnWj0kza16XjNX9UrrZ+Jjf2D+97ikT9nTCRx6MUN/RYNqdr6IURDGXsBi5dYxiGYeIffVIYLUr0Z2oHE+ot0Z8dLs1KEYtVWlyebOgQ0ce9OTr+3Jm+Gpxlf4K/tLZA4QcF6VaxSKWmfkpek3NUqNSJZvL06NGhifCH1wB7X1ESrHziipUHnQRXyUxUnziAYksrHPUnYDXYgboDysUfWcPRXTwbv9iTgR3usfjb3bciJTUNe3aewe0v7MTotjSsO+/CHq+poUv5OTNAdDVFWtP7K9/H5X24CZdNKxFCp6+0N+8+jODLk/o7S0c6Cfr48f5CPVm+7qAs01o+tbjfZWsENeBbjG7YXQYR8d2X0Hl9l5p2N7W4T/dHvkdmo5IM2BdSTFC5mb9Y9d6g1z62MF308xHkvtJJCAm5T1Lo0HFADllfn6ncL+h4lycOokXiCB1ZeeqI7jwBhmEYhhmMHh1yIXLV+ni/c0vCDLkhlNpEUMrYjoomUZl06VRlYU2LO1pQ7TrdLMrEaPEtE8P8ldtojo7ax6N/HfJ1+VKkCh1/aW1UOkRn9X3PetNCj5LJtp5oFH0KUuhIwUik0WKt8mNg59+A3f9U0r6ga74vmQmMWAAMX6g01qfmwmm3Y8uqVVixYgW++OwWVJw4iAcvSMWi3Gag/qgY5oi8scCwc5RJ9xnF2HGsHs9+/CHKc1OEyCEumVQkyvSO1bXjYHUrJhZ7BlqSmNPm6KQGXmhTyp1c5PdVpnXRhEIxZ6ivtLeBJmvl9XOf7OiWQmfgC2a5L5FrRz01JGDX7VfL1qYPfL5LqglodinJd75+F+2DtM8RlIi2dl9V0GVycv+m/ZnES9+3V95/couCub0vtP9LoUP9Q3pmleeIEwjkkgb6nKWjRLeh95f6dcT1UXZzEkvoGKTQYUeHYRiGiV+0ciurUroWzNlzapK+8x878fjnZolG5IGUqX3r7x9pDohk7ogcTXzIxn9F6Hgipmk7/Q3SlMlo/hydQOUwJAgoAYoas/X9GERNS7d2mxwSBS6nNsiRkqeE0NH1D1F/Th6acY11E4xPP6DMfJFQ7PD0a4BxS4GyOUppVy+MKc7CB8eLsME9GovmTwp4O9knNF4NSJDvz4XjC7B2XzXe2F3lJXS67C6tRKg3R4H6kDYcqhVCc7z6vgciJcmEiycWYNXuKuF69CZ06gYwK0UrXdM1rn9U0Yib/7hVOEjXzRvudft2tXQtbYA9OnJuEkGN9XTRru8l/SwYUsxAs90T8S3Zc6YZ1/xuk+ZGSWjfnBvEMFb5fgYbLNDf2/siAzmyUy1YMMa7/JFOUNDJiuc2nggoXOTz/3vnWXHxvT6aJJDQUf4DMPDAUIZhGCYRSteoRyc9OKHzzHvHxKKZSlQGInTeO1zbQ+RQNPIXF47y2/hMyWKBZuj469GRZWj0OlLQhWnuAzDs/AjD63fBsKsVSEpWhjUaLbgi5RCOdHSj+0A3UOdU0slaq5BSfQp/tRxBmbkZhl98VYlfJjcmKQ0/cqfgS0kmWD5KB6qKxNyYvLY2fGj9QBkkWa1GLE9YAcy8HhjzCcAU/BJqhlhMn8S7B2vxwxW9CB01+U32DUkWjskTQsc3uU0usOksflovPSyXTy/Bvz46ja9fOCao7SVhRUKHRGlvNAwgQthf6dqz7x8Xr4VcFl+ho6WuhSB0zh9bgN9aj2px4QQZH186b1RIseskdAhfobPxaF0PkUPu5pcWjQzKcSGxQe9TsMci9Wb15/a+LJlchN+/f0wcr/56rb5w7gis2Vslyhr9QVHUJJIomlr/eulxo03CCB2H6uiw0GEYhmHiFdFAL5PCki2eNKRehM7Zpk5RZkZsPdGAmpYu5KT0r0xILlp/fPlkfOFcZaFqMhi8av29o2zbeu3PkQIoE+2Y4jiBrg0HkFK3B189uAX3WCtg3OsG9gKz6IYVf/C63730D73sDd6Pl08Xelmkx+RSwOUQgicdzRhHm0omw/GD4lfiHLcB2G8cj0nLvwpMuUqZHzMAFk8qEgmwVHpG83TIWfGHdJTkGXbfkAXfNDn9sNDe+kxoUOmOe5YGvb3S9ekrElu6Mv0pUfLdJ/XpZ7IMz3+PzsBL18iV2nnvUjhcivtFGA2GoAMUApFqpp1J6dHRIz+nW88fJQZv9vf56P3ffvfioHuHxvXz9r6MzE/D5h8uRiBof9141yW93n/73Uu83l8DDH6TEQebBBI6qqPj5B4dhmEYJj4hV8ahDpoRpWt+yoR8eUNNR5MJUm/urcLn5pb163nlopV6BPw1K0vkAv5obRvONHb2HHBo6wCObwAOrUbysXewK/mEcv07yhdxPtkAdFoLYC2bipq6RhTm58LodgBOB+Cy40x9C1raO5GfZkFBUalSZpZehA9rzXhhvx3jxozBN69YBKTlK/NhuttQ19CA2/70HjIMXXjqsxNgcXZg/+l63PZhBjLLp+CVc85DKFD/zHlj80XSF6WZfeuScb06OlIQ9pZA5yt0wokUYtRr1dxhD9j/01fPlD98yynfPaSkn/lzRoh21YUJxdEhyEkxkesXRqhHx992y89pWE5qr8dDb/RXtAxU5ISLSLy/4SCBhE6SOItjZEeHYRiGiVNa1QGXtOahxCMtjKCXKF85xHB0fppoeKeSpf4Knb56ZyRlOSlIthiFICP3iBif3ARs/T1waA1w/F3A5+90hasAycNnoXD8PNy92YQ364vwq88vxcJR2disNvsb1Xhk4t/rj+CXqw/iqqlleOSamdr1q1/bi1ddJ/D1sjFA4USv58jLd2OvpVmUNh0rvgATijOw33AaRzd9jPNDSPvSQ0MpSejQlHl/Qqex3aYNfRzjI3RkeV9Na5cWza1fYMuo43ChT2o7UtuKOSNyQ/rc/Zauqfuk3P+Ilq7IODqRIlDpmr95TUx0SBih4yRHh4SOs0s5ZRVl5cswDMMw4UaWrZGbQ2d4+wojoDPP2082iu9/efV0XL1yEzYfr0e9uuAOlj6HA1Ikc3stTG3V+FzWPnQ0VmJsRTV+lLQTk7ZXeN82qxwYvwwYtwzfes+E/xzuwoPTp4nejTXvvYVadPe6sA7kfnhm9vRcfNJ7Rf1DH1U0ieQ1Ejr6XqdwQP0KplcM2F/ZguN17RiV7x1gcKRWcXNorotXnDWV3KVZRdQwuXXksshSNk3ohGkbfV0dWrBTOV1fQmcgqWskKknYyPSzgI5OGHp0IkVqQKHTc14TEx1ib6+JEHZjEuAix9sNOO2AOfpJEAzDMAwTqRk6vo3f/ubKrFZnicwZkSPSoGhwIjWgr9lfg2BHKFJ0bmOHuuC1uoHj7ynOzOmtIgQAbdVApyKmiJ/QPzoDwm0wwjBsniJuxl8KFE7STkZm7N1Nno42FyeYhbWMjvYVOpXqEFGvUjmfsjohdNQ+GS2mO0yOTk5akggVeO9wnXAxvnnxWK/fy34Yf/071DBP6XUU20vvha/QCXfpmnw/aFtlOV3vpWvBr6kyU8yaaKOELtpn5Rwjcm8oolzfyyIHhvYWthAtUkSPjrfQoe0nMUqwoxN9EkbouNQeHS1imoUOwzAME6+OjnqGXy5AaVHZ0uno0WtBZWr62R40Q4OEzuq91bi2MIgndDnRemw7vmp8DQuNe1Hw5JHAYxwo4SytEDXuLOxptqLanYPNrkn45q1fxbhRI/3epVRzZzrF9sv+I+V1eRqf9ciz6L5DQ+kxepscLxPhKCzAO6Y7fCKC3mcSDxTb7Ct0pMCimSaBXhcJHb2Aa4mk0NEl5PmD3lsqt+tv6hp9HiT6alu78dcPT4rrrpxZij9tOqmJBoph7pG6FibBGWlHh14XFQ6RmCMnjokusbfXRAiXwQyX2wCjwQ3Yu4DkYM9VMQzDMMzQQMbnSheCppLTmXAq/6lv7/YSOpSutvWk0icjh3rSFPRfrD6AfcdPoxCbYdxSAVCjP5WeUe+MU/1Kw7c7GoCTHyC7qwk/kA9LT59WCIy6ABh1PpAzCkgvVAIBkrPJmsDOvVX4yvPbte24ryhwP1CxKkpItND2E/R66HXZ7f6Fjpzb02l3auIumLPs0kmRzoqvaAwHSycX4Uev7BaDOCvqOzA8L1X7nRRYvolrErndsiwq0o6OFFxyto8vPYVn8FDpIQmCA1XKY18+oxT/+uiM2H8DCZ1YdHRkGIE+dU3259B+GEp0NRMeEkbomE0GdMOCFKj/STMMwzBMnOFZnHsWvtQ3097QKcq+Rhd4bkvpanTmeWZ5tugLIUbkpeHW/D24tfUpFJ5pAs70/ZwOSzre6RqPgymzcduXv+xVeuYPOSiUSLGYRClTMP02ffYBqZAIooU33f5sc6cQOiRy6LVSxHOg/h65XdQ/Q8LItwwwHOSlW8XMk41H67FqTyW+pptrQ71B/mboSGS52mA5OmMLMrSFO0279x3qKoUnier+JovpHSBK6pszPEcEKkih47dHJwYdHVm61qIed331gjGDT+ztNRHCZKDY/CQWOgzDMEzc4m9xTslrpxo6e8zSeV1NuyIXR9BaDaz6Dn7U9pqIcD5jKELJpIUwJqUqwzLNyUrZt/hqBSxpQNkcrG0oxtf/vgvnlOXgtqLJfW5jeU6KmK9hc7jEYrC3WFzpYtDisT9RxtSHQ0KH7jepJFMrW+vtLDuVyUn362R9u6dHJ8yN/lS+RkKHYqal0KHFfXWLIhwCzdiRvUWy10jeL1JChwQiiRASieQ20SyeUIMIJPrPcPnUYvGZ0Gug0jy90HG6IPaTWHV0/KWuSceN+3Nig4QSOuToCOwB6ocZhmEYZgjj6Svx/Hn3l7xGZUNbjitla8tpmvqOvwBv/lAMz3QbzXjSdhl+47wS7y27FAVZnvIqf9SdPtGvBS9FI1OUNZUt9bUYlIt7OtN/qqHD6/X0BgmofZUtWhlRX8NJCRJcY4sy8PEpJZCgTY3qDlcYgYSm1//433vw8elmnG7sELNWZNkavd5MH+dE/5p8HZ1ICh3Zp0NC57AfoTOQIAKJ/jNcrvaHydegLwPr1lUnxmTqmm6OjuwHk5+PdOCY6BJ7e02EoACPLneSOEslaosZhmEYJs7w50Lok9cka/ZVgdorlpR0oPz1zwPH1iu/KJkJw6d+g//+vQFd1W1460ANrpvvPygglKGRVCYWjNBJs5pFdDKVBu092+L1enpDPu7PXt+HR986hC61/En2/ATcrsJ0RejUkNCJjKNTkGHFvJG52Hy8ASsefw9WiwnddqdXAEBf7pYkUnN0JNQv9MGRek2I6ZH7U34/gggk8jOk+54zMjeg0FE/NlFySC5grIYRUPIgOYEkivtK92MGl9jbayKEWS1dEwRKhGEYhmGYIYw/F0L2Q+iHhq7edRpfNq3CU823KSKHytGW/BS4ZR1QPA3LphQpt9tb3edzDmRo5Plj87VY676QKWl7zzZ7vZ7emDtSeVxafJJ7JUMa5vbxfCR0CCF0usLfoyO59pxy8ZUEHG2f7PE4T31fensfqlu6xMJ6MBwdWUbnL5AglNI1KW6+cO4ImNRSQvkamv04OrHo5hAWoyLC9NvNPTqxRWzuOREvXeMeHYZhmHjjySefxEMPPYSqqirMmDEDTzzxBObNmxfw9o899hh++9vfoqKiAvn5+bj66qvx4IMPIjl56C5QtMV5sr/StW6gswntHz6Ln59+EmWWOiWheeT5wBWPA3mexvhLpxTh8bePil4SWsD1tpAeSAnTNeeU4+KJhcLd6AtyMg5Wt2quQjCC6tOzhmHuiFzNlZHBByN9hnQGjFSubo2Yo0NcNVvZvnZ1RgxhNRt7DBHVQ+8ViQJKOqOBroWZyZEvXdOS6Ho6OnXqUNn+OHmSBWPy8PE9S72CKGQioJfQUR2dWOzPIai9jN77ujYbmjvsItRDCh3u0YkNEqt0TXN0WOgwDMPEEy+++CLuvPNOrFy5EvPnzxciZtmyZTh48CAKC3sOhPnb3/6GH/zgB3j22WexcOFCHDp0CF/84hdFjf0jjzyCeOrRoYXocEM1Vpx+EXjkLaTZ25FmAJoMWci+7D5g9k0i9tn3TH5xihtVncC6/dViYR6Ihrb+z1IhghE5+jPjqokR9MK6PLf33iJ/yGjnY7Xt2nXh7tGR6KOlg4FEDoUDUL/R2eYuUa7WrTbqR6p0bbyaREchAe3dDlFKGIqTp8d3ppNfR8dpiNnENQn1VAmh02kXTluVWroWaF4TM7gkVOlat1s9qFjoMAzDxBUkTm699VbcfPPNmDx5shA8qampQsj4Y+PGjTjvvPPw+c9/HiNHjsTSpUtx3XXXYcuWLYibHh3KUz7xAS786HasT7oTS9v+Ddjbcdo8At+z34oXFr0BzL25h8iRzMxTlMUqNZ0tEKGUMAWD75nxgS6sg4HOyJPzY3O6xIXICOPA0FDx9Ol0oqXLrrkKkSivI2iwp+zBOVrbFtHPnXqxApWuxaqjQ2SleLabXC4SOyRKgxXyTGSJXYkckdI19WDk1DWGYZi4wWazYfv27bjrrru064xGIxYvXoxNmzb5vQ+5OH/5y1+EsKHytmPHjmHVqlW44YYb/N6+u7tbXCQtLUpjvN1uF5f+Iu8zkPv2Bs07IQraDsL1u8/BWPUxxOgcA7DRMAuTPv09XPiCW8T2rplcFvD56foZeS6sPm3Eu4dq0dDa6VUO52+eSqbVGPbXQxSmewsN+TyReg/HFKRhjxp8QCQZXTHzGReri+fTDe0YkZOsCQSn0wGnMzLbR+8HORYHzjZjUpGntK5OHcCalRyezz0tSRHcTR027fOVYQSpSaaI7FuhILcn3aqIsMb2LpyqV8RgQXoSXE4HXM7ob589xt63cBHs60oYoWM2utEle3Q4dY1hGCZuqKurg9PpRFGR0kAvoZ8PHDjg9z7k5ND9Fi1aJGJhHQ4Hvva1r+GHP/yh39tT7859993X4/o1a9YI52igrF27FuGkpsGEAjRhyrpvwuhshNNgweGsRfhm9QqcRCk+u9kBp8uE0lQ39m95F/t7eaySFKAoxY3qTuDRF9diboFaO6aDyska2mihZ8DOD9/HiQicxK5oovIlzxn9j7d8gNO7Ivcepthowa0supOMbqx5c3VIjxfO7etsULZt4879aKsgu8MMs8suRHqkts/SoTznmx/ugrVyp3b92Qblc9+/cyvajyBkDjUqn/Pp6gbt9cjStdbGupBeYyTpaKoT78/mj3bhsNj/TUh2dcXM9q4N8/ERK3R0KHHzfZFYA0MpXprg1DWGYZiEZv369XjggQfw1FNPiZ6eI0eO4Pbbb8f999+PH//4xz1uT24R9QDpHZ3y8nJR8paZmTmgs5G0AFmyZAkslvCVRj2w802sTHoU6c5GuPPHw/WFf6PEkoOj978tfn/YkUfnzPHZc8dixcVj+ty+T88diZXvnUSVpQQrVszscbumDjtcH74jvv/MFZeKhvpwM66mDSv3b9R+/szlS0UKV6Tew1MbjmPr2sPi+6xUK1asuGhAjxOJ7av64ATWVx5Cal4pJs8oAfbsQHFeJlasWBCx7WvYXIH3/3sA7owirFgxS1xHJwe+s+Ut+g5XLL1YlPyFSumpJqw8sAVuSwpWrLhAbN/6P9NzAKPKS7FixXTEEvL9mzCqHNvrzqB05DjkplmAQwcxcUQxVqyYERPbtyTMx0esIF31vkgoocOpawzDMPEHJaaZTCZUV3tHIdPPxcXFfu9DYobK1G655Rbx87Rp09De3o6vfOUr+NGPfiRK3/RYrVZx8YUWEKEsIkK9vxduN77v/B1mGY/AZc2G8boXYMkuRRaAZIsRXXYXtp1sEje9YuawoJ53xbRSIXTePVyHbpehR2N+i02pkKAekfSUyPQklOd5ZsvQ68hKS4ncewhgQgm9YwoZyaE/dji3ryxXKR2rabWh3a40sGSnJkV0H5Tvx9G6du12VCJpdyoOX1FWGiyW0Hto8jKUz5WituXzyNS19OTQXmMkyU5V9vs2mxPqW4LS7NSY2V5LmI+PWCHY15Q4YQScusYwDBOXJCUlYc6cOVi3bp12ncvlEj8vWLAgYNmDr5ghsSTPVg9FHBt/g6uMG+BwG9H56T94xUXn6ZLKxhela/NR+mJicbqIPLY5XHjnQE2P38vZPLkDGBoZLCQ2pMDSv45IISOVIxUtHQoyga6ypVPEGUcyWto3ia6ioQOdatOMDCKg4IaUMAUFyNdByYEONQhClq4NlTACSsQjeIZO7GBMqNI1FjoMwzBxCZWVPfPMM/jTn/6E/fv34+tf/7pwaCiFjbjxxhu9wgquuOIKMUPnhRdewPHjx0WJB7k8dL0UPEOKI+tgeuse8e3PHNcjefwlXr/WJ2Mtn1oS9MNS3PbyqcUB09fEbJ4IJq75po1F+nlkLLUswYtUtPRAKZZDQ5u70RThGToSSl3LSbWIED+ZvDaQ2Ul9oY/IlumBWhhBjH0O/rabhA7P0Ik9YnfPiWS8NKeuMQzDxBXXXnstamtrcc8994iBoTNnzsTq1au1gAIaCqp3cO6++26xiKevZ86cQUFBgRA5P/vZzzDkqD8KvHQzDG4X/uG4EP8wXYZ71WnzEv2C9LLpwQsdYsW0Ejy1/ijeOViDDpvDa0q9XPBGMvJZniGngaGDIXQoGnhMQTr2VbYETJqLFjRHh+KkKfr6eF17RGfoSOg4IVdny4kG8RlMLcsa8Oyk3rCYjMK5abc5hWhIT0oaGvHSyR6hI4eolmaz0IkVYusIHrSBoZy6xjAME2/cdttt4hIofECP2WzGvffeKy5Dmq4W4O/XAV3N6Cicg7srvoSczJ4LX7kgpahgfWlWMEwpzcTw3FRRuvTOgVovoSQXvBF3dDKTw76w7o1xRYrQSY+hGTpSDBSkW1HT2o2DVa2D4ugQY4vShdB5eO1B/H1LhbagD7fAJdEmhU5ZVpLWoxPbjo5autZhF06b3nljok+Clq6xo8MwDMMMcWhIx8u3AHUHgYxS7L/wKdjg6WfRM6lYSYa7ek65OEPfH+j2SyYrztimYxSli56OTnpke2cmlSjbT07LYDB7eI74SgIv1pD9H7KMbDCEjnw/TjV0YvPxBhytbY/I5yFfixwaKoVOLDs6maqjc6qxQzhtdHiR88bEBrErkSNQutbOqWsMwzBMvPD2/cDhNwFzMvC5v6KxWVmMpqsLLz03LRyJOSNzMHNY9oCeilwd4nC1sriWNAxS6doNC0aIkqkZ5Z5EtEjy+fnDhbgarOfrDyVZKfj4dLOWeiYX2pHk07PKUJRpRUun0jtDUB/TeWPzI9bvQlDSH6Evl4zVMAL5eZDjRs4bExvE7p4TidI1bY4OCx2GYRhmCHPwDeD9R5XvP/UkUDYbbTVntKhnX5LMRu2sfCjJW9Sj4U/oRLp0jRaO80blRvQ5ovl8/cG30X0wHB3qWzp/XEHEnyego2ONYUfH5/3nxLXYwphQYQScusYwDMPEAx89r3yd9xVg2tXi29ZuR8SSwsYUpmmlavVqf4b8mRiMkADG/0J6MITOYBFI6MSyo0NldSQEJZy4FlskjNAxGdy6gaHco8MwDMMMUVwuoGKj8v30a7Wr29RI3kjMfqGFZnluSg9XR8ZLD8Z8GyZ6js5gIV9LS5csXYt9R4d62PSfAZUWMrFD4ggdTl1jGIZh4oGafUBnI2BJA0pmaFe3ddsjOvtFlq8dVoUODVbVStcGKQ2N6bmQjkuhozo6co5OWgw7Or6fATs6sUVCla55enTY0WEYhmGGKCc/UL4Onw+YLD0cnUjNfpGx1NLRaelyaA3YkQ4jYAKXrkV6jk60StecLjdsWhhB7Do6vp8B9+jEFgkVL+0pXeMeHYZhGGaIC50RC72ujmSPDjFWFTqHa5T5LdLNoUVosiW2F6LxRGGmp0yQgif0/SFDHW0mTacdnXbVzhGla0PI0VFnPjGxQcIIHTOXrjEMwzBDHbcbOKn254xY5PWrSPboEOOKlNK1Q2rEtOzP4SCCwcVqNiFfLRWMJzfH19HpUOvWSMdRlHUsk6k75rhHJ7aI7T0n3ANDuXSNYRiGGcrUHQLaa5XZOWWzvX7V2jU4jk5tazeaOih9bXBm6DA9kX0g8S10HFoQRn+H3EbT0SnK4mCOWCIxS9ecNmWiNMMwDMMMxbK1YecAZu8FVVt3ZHt0SECVZXuS1wZrhg7TE+kayGGVcSd0OuxoV7OlKb55qGw3OW3kuDGxQ2KWrhFcvsYwDMPEKGebOvHo2kPCPfHihCJ02ovn44l1h7V5I95CJ3Jn+T19Om26GTp8BnuwkQ3v8ZS4pneoqN9M7s+xHC0tkZ8DJ67FHolVuuYldDiQgGEYholNfv/ecTy+7jD+trnCpz9HETqvNo3Cw2sP4aE3Dwxa6Zo+ee1wtcfRyeNo6UFnVH5aXPaDSMFAu3qNKvJjeViopER1OkflK8cHEzvE/t4TxnhpF4ywuU1IMjh5aCjDMAwTs1S1dHp9FTQcA1orAVMStjrG0BVYvacK931yqkjeivQcHWJckSd5LT9dcXK4dG3wufaccpF2d8mkIsQTVPaVbDGiy+5CZXPXkIiWJpZNKcIvr56ORWPzo70pTKI6OjJ9sVtLXmNHh2EYholNZKO//CqQaWtlc1DdofxRq2uzYeuJBtidLrE4jGSPDjFWHRp6xKt0jYXOYEMux7XnDNfEZjyRqZZeVg0hoUMC7Zq55ShVnR0mdkgYoUOBHRaTAV0ykICFDsMwDBOjyLIw+dV3fo7++lW7K9Gu9jNEeuaIdHTobPvJ+nbxvYw6Zphwlq9JRydtCJSuMbFLwggdIslk9Dg6PDSUYRiGGUpCRw0iwIjzNDeFeGNPFVo6FaFDZT8WkzGiZ9vlQMST9R3iK4cRMOFEEzotqqMzBMIImNgloYQO/eff7ZaODvfoMAzDMLGHy+VGY4dauiYFTVMF0FwBGExwDZun/Z4qFSiZ7d1DNeLndGvkU7ikqyPhOTpMJB2doVC6xsQuCSZ0qHSNe3QYhmGY2KWp0w6XW/me4qOp/0brzymdiRaXFU71BpdOLRFf/7HtdMT7c3wjpiXco8NEQug0tCvhGix0mFBIKKFjNhk9QodL1xiGYZgYpKHde3aOcG9OvN+jbI1EzadmlIrvd59pjnjimmScGkhAWM1GXogyEZmlI0njHh0mBBLO0fGUrrHQYRiGYWIPr6Q1+bMMIhi5SPs9lYwtGpfvJW4GRejoStdoGwyU9sMwYcJ3CCoLaSYUEkzo6BwdFjoMwzBMDKIPGiDaak8pM3RgAIafqzk+VDKWbDFh8aRC7bbpg1C6JoeGim3gxDUmzLDQYcJJ4godHhjKMAzDDAGhYzil9ucUTwOSs3Tza5S0s+XTlD4dImMQHJ3s1CQUZMhhoZy4xkS2dI2FDhMKCSV0kqh0jefoMAzDMDFMg0/pWnrlZuWbkYu8fi/Tzi4cX4A0dTE4GI6O3tXhxDUm0o5OJOdCMfFP4jk6bi5dYxiGYYZOGEFB/TblmxHniS/S0clTy8aofO0Tk4oGNQFtQrESSFCYyY4OE164dI0JJ+aEjZfm1DWGYRgmBtFS1axmJHXXI6/zuPKLEQu9hojqRc2PL5uE8pwUXD9/xKBs4y3njxYnD29cMHJQno9JHFjoMOEkwYSOkUvXGIZhmJhGChlKNys8rfbnFE4GUnO9fi8dHfHrzGR879KJg7aNZdkp+OGKSYP2fEwCl65xvDQTAglXutbNqWsMwzDMUBA6hRmYb9zvVbZG+IYRMEw8wY4OE04STOgYPD06XLrGMAzDxCD1OkdnvvGAcuXI83r08HAQABOPJFuMSDJ5lqcsdJhQMCZu6RrHSzMMwzCxhdvtRqMqdCZmOzHRUOHl6NDv/fXoMEy8QANo9RHTKRYWOszASSyhY9YPDPVOtWEYhmGYaNPS6YDD5RbfT7TtgdHgxlFXCZypBeK61m4H7E7l9yx0mHglM0Xpy7Ea3TAaDdHeHGYIk3BzdLrc6lkCHhjKMAzDxBj1allautWMnNqt4vvNrklo6rB5zdChuTkUK80w8dynY+VdnAmRhBI6HEbAMAzDxDL6sjRThZK49qFrkta3I4VQri5xjWHiVehwew4TKgkndLo4XpphGIaJUaSgGZbqACo/Ft9vcU1EverkyK+cuMYkhKOTUKtUJhIk1C7EA0MZhmGYoeDozDMdAtwuVJmKUYU87Xpthg735zBxDJeuMeEiwYSOEd2yR4dT1xiGYZgYo75NKU2b5lLm5xxNnekVKe2ZocNCh0kEoaMEbzDMQEk4ocOpawzDMEysIoVMHlrE1/bUYV7Xa44O9+gwcUx2qrJ/s6PDhIqS35eQpWvs6DAMwzCxhRQyaUaH+JqUnOZ1PZeuMYnA8qnF2HSkFhONVdHeFGaIk8ADQ7lHh2EYhoktpJBJMSpfk5JTxVdP6hqHETDxT2l2Cn57/SyMy+LSNWaQhc6GDRtwxRVXoLS0VEyvffXVV3u9/fr168XtfC9VVVVRmqOji5d28wHEMAzDxA4yVS3FoH5NVR0d9XrZq8OODsMwTASETnt7O2bMmIEnn3yyX/c7ePAgKisrtUthYSGiOkfH7QKc9kHfBoZhGIbpy9GxuqXQSfe6XgoeDiNgGIaJQI/O8uXLxaW/kLDJzs5GzJSuyeQ1M/+xYBiGYaKP2+3WBI1FFTqpaelayRr9nlPXGIZhYrBHZ+bMmSgpKcGSJUvwwQcfIFphBCR0XDAoV3DyGsMwDBMjtHU7YHO6xPcWl/L3KV0VOo0dNrTbnOh2KL/n1DWGYZgYSF0jcbNy5UrMnTsX3d3d+P3vf4+LLroImzdvxuzZs/3eh25HF0lLixKzabfbxaW/yPsYQT05BtiRBCu6Ye9sBaw5iDZy+wby2gYD3r7Q4O0LDd6+6BKvrysWkW5OapIJRqcSmJOeTkKnBU6XG8dr28V1yRYjUpMSKjSVYRhmQET8f8oJEyaIi2ThwoU4evQoHn30UTz//PN+7/Pggw/ivvvu63H9mjVrkJqqJNAMhD27PwZgQjfMQuhsePtNtCWXIVZYu3YtYhnevtDg7QsN3r7o0NHREe1NSBi8ytLsXVrqWoa1A63dDhyqbhXX5XHiGsMwTFBE5ZTQvHnz8P777wf8/V133YU777zTy9EpLy/H0qVLkZmZOaAzkrQImTdnNp458DFsBivgbscFC+cDxdMRbeT2UVmfxaLrIYoRePtCg7cvNHj7oot01JnII4MGRKJahzrrzZyC3PQkIXQO17SJq7g/h2EYJoaFzs6dO0VJWyCsVqu4+EKLiFAWEilW5b4yec3idtCDIlYI9fVFGt6+0ODtCw3evugQj68pVpGla0LINKuz3izJ4ueT9R04UqM4Oix0GIZhIiR02tracOTIEe3n48ePC+GSm5uL4cOHCzfmzJkz+POf/yx+/9hjj2HUqFGYMmUKurq6RI/O22+/LcrQopG6RthkxDSlrjEMwzBMLJWupSZ5/j6ZU7SZOdLR4Rk6DMMwERI627Ztw8UXX6z9LEvMbrrpJjz33HNiRk5FRYX2e5vNhv/93/8V4of6a6ZPn4633nrL6zEGM3WN6JJCR62BZhiGYZhoI4eBFqQZlVlvhCVZ68mpaFD6pThxjWEYJkJChxLTKMs/ECR29Hzve98Tl1hAOjqdcpaOg4UOwzAMExvUqz06hSmqyNH16BDyT28uhxEwDMPE1hydWMBsVB0dtyxdY6HDMAzDxFbpWl6yPJloAMzWHqVqXLrGMAwTHAkldCxm5eV2uVVHx849OgzDMExshRHkW1VHx5wMGAw9wgc4jIBhGCY4EkroJMnSNSl0HJ6hpAzDMAwTC0InJ8nTn0P0EDrco8MwDBMUCSV0ZBhBh0sKHXZ0GIZhmNigXg0jyLE4lSvMKX4HhHLpGsMwTHAkmNBRXm63DCPg1DWGYRgmBuiwOdBlV5yc7CSnt6Pj4+Bw6RrDMExwJJjQ8YmX5jAChmEYJoYS16xmI5Jh83F0krxKsNOtUZn1zTAMM+RIMKGjhhGw0GEYhmFisD+HRI1B/m1SHZ1kiwmpSSbNzTEYlJN2DMMwTO8kZLx0N6euMQzDMDEodESZmvzbRKlrPuVqXLbGMAwTPAkldOgsGNn+HkeHU9cYhmGY2JmhI4aBSkdHJ3Rk+VoeJ64xDMMETUIJHdmn4xE67OgwDMMw0adBTVwTgkY6OhalR4dgR4dhGKb/JJ7QMRs5dY1hGIaJUUcnyb+jk271GzXNMAzDBCbxhA6Vrrk5jIBhGIaJHdq7HeJrRrJZ5+h4hM7CMXmiImH+6NxobSLDMMyQI+EyKqlHp5tT1xiGYZgYwu5we9JBNUfHU7p21exhuGx6CaxmJX2NYRiG6ZsEdHQMutI17tFhGIZhoo/d5fLMe/Pj6BAschiGYfpHAgodTl1jGIZhYguHU3F0zEb/jg7DMAzTfxK8R4cdHYZhGCb62J16R8d7YCjDMAwzMBJP6HDqGsMwDBNj2J299+gwDMMw/SfhhE6S1xwdLl1jGIaJF5588kmMHDkSycnJmD9/PrZs2dLr7ZuamvDNb34TJSUlsFqtGD9+PFatWoVo4FB7dMx6ocOODsMwTEgkXOoal64xDMPEHy+++CLuvPNOrFy5Uoicxx57DMuWLcPBgwdRWFjY4/Y2mw1LliwRv3vppZdQVlaGkydPIjs7O6o9Ol5hBOzoMAzDhERCCh2tdM1pA1xOwMhJNgzDMEOZRx55BLfeeituvvlm8TMJntdffx3PPvssfvCDH/S4PV3f0NCAjRs3wmJR/iaQGxQtbGqPjlcYATs6DMMwIZGQQkcrXZPla0mp0dwkhmEYJgTIndm+fTvuuusu7Tqj0YjFixdj06ZNfu/z2muvYcGCBaJ07d///jcKCgrw+c9/Ht///vdhMvU8+dXd3S0ukpaWFvHVbreLS3+R99G+OpzKdsMFl61D1JU7DBa4B/DY4cB3+2KRWN9G3r7Q4O2L7+0LlWBfV8IJnSSzbo4OQWfOWOgwDMMMWerq6uB0OlFUVOR1Pf184MABv/c5duwY3n77bVx//fWiL+fIkSP4xje+If543nvvvT1u/+CDD+K+++7rcf2aNWuQmjrwvyFr165VXkMDiSsDdny0Hec11iITwOaPdqHusCKAooXcvlgm1reRty80ePvie/sGSkdHR1C3S0hHxwkTXAYzjG4HDw1lGIZJQFwul+jPefrpp4WDM2fOHJw5cwYPPfSQX6FDbhH1AOkdnfLycixduhSZmSRL+gcJKlqAUJ8Qlc799vgmoL0VC+bPQ8YaC9AFzF94Adzl8xENfLcvFon1beTtCw3evvjevlCRrnpfJKTQIRxGK5KcDk8tNMMwDDMkyc/PF2Klurra63r6ubi42O99KGmN/vjry9QmTZqEqqoqUQqXlKQrcQZEKhtdfKHHCGURIe/vcClhBMlJFhjUv0vm5HS6AaJJqK9vMIj1beTtCw3evvjevoES7GsyJrLQUb5hocMwDDOUIVFCjsy6deu8HBv6mfpw/HHeeeeJcjW6neTQoUNCAPmKnMHAoYYRUHm1Vmlg4dQ1hmGYUEjIOTqEw6D+IeOhoQzDMEMeKit75pln8Kc//Qn79+/H17/+dbS3t2spbDfeeKNXWAH9nlLXbr/9diFwKKHtgQceEOEE0RwY6pW6ZubUNYZhmFBI2NI1Ozs6DMMwccO1116L2tpa3HPPPaL8bObMmVi9erUWUFBRUSGS2CTUX/Pmm2/ijjvuwPTp08UcHRI9lLoWDexavLTu7xI7OgzDMCGReEJH/BUB7NLR4aGhDMMwccFtt90mLv5Yv359j+uorO3DDz9ELCB7dKywea5kR4dhGCYkjAnr6HDpGsMwDBMjSEfH4tYJHXZ0GIZhQiJhe3RsBi5dYxiGYWIDh9qjY3GpQ0kNJsAUf0lJDMMwg0nCOjrdWukaCx2GYRgmxhwddnMYhmFCJuGEjlkVOjbI0jXu0WEYhmGih9vt1np0NEeH+3MYhmFCJmFL17ql0HGof1QYhmEYJgpIkUOY3erfJHZ0GIZhQiZxS9eg1j5z6hrDMAwTA/05hJkdHYZhmLCRwEKHU9cYhmGY6GNT+3MIk1M6Oix0GIZhQsWYqHN0utwcRsAwDMNEH4dO6Jhd6t8kM5euMQzDhErC9uh0aqVrLHQYhmGY6PfomI0GGGTfKDs6DMMwIZNwQsdqNomvnW5V6HDpGsMwDBNFbA7F0THTiTiZBMqODsMwTMgknNBJSVKETpvTrFzBYQQMwzBMFNGipY1GT5WBWR1qzTAMwwyYxBM6FkXotDtl6RrHSzMMwzDR79ERPaTS0eF4aYZhmJBJWEenVTo6PDCUYRiGiSJ2p6dHx+PocI8OwzBMqCSso+MpXeMeHYZhGCZ62KWjQ+MP2NFhGIYJGwnr6LQ4lK8sdBiGYZho4nBJocOODsMwTDhJWEeniweGMgzDMLFUusaODsMwTFhJOKGTrAqdbhkvzalrDMMwTBRxcI8OwzBMREg4oWMyGmA1Gz2ODqeuMQzDMFGEe3QYhmEiQ8IJHdmn4yldY0eHYRiGiQWhY/CcfGNHh2EYJmQSU+hYTOiGLF3jHh2GYRgm+gNDRY+OLKdmR4dhGCZkEtfRccvStS7ArfyRYRiGYZioOjoyIIcdHYZhmJBJYEdHFTpuF+C0R3uTGIZhGCT6wFB2dBiGYcJJAgsdtXSN4OQ1hmEYJko4vMII2NFhGIYJF4kpdJIUoeOGQbmCk9cYhmGYKGFXe3SUMAJ2dBiGYcJFYgodMUvHAKfRqlzByWsMwzBMlLA7XLqBoezoMAzDhIvEFDpJytBQh1EXSMAwDMMwUcDh0sdLs9BhGIYJFwns6JDQUR0dFjoMwzBMlMMILEb9wFAWOgzDMKGS0I6O3SBL11joMAzDMFGOlza6AJeaAmrmHh2GYZhQSUyhozo6doMcGso9OgzDMEx0cKiOTqpBN+qAHR2GYZiQSWihY5OODqeuMQzDMFHCrvbopBhsnivZ0WEYhgmZhC5d65JDQzl1jWEYhomyo2OVjo4pCaB+HYZhGCYkElro2OTQUA4jYBiGYaLco5MC1dFhN4dhGCYsJHTpWqeb46UZhmGY2Ehds0qhw/05DMMwYSGhhU6XW3V0OHWNYRiGiRIO1dFJ1hwdFjoMwzDhIKFL1zql0OHUNYZhGCZKOFzS0VF7dCxcusYwDBMOEtrR6dCEDqeuMQzDMNHBpjo6SW71bxE7OgzDMGEhoR2dDpcsXWNHh2EYholu6VqS1qPDjg7DMEw4SEihk6oKnXanWbmCwwgYhmGYaMdLu7lHh2EYJpwkpNBJVkvX2ljoMAzDMLFSuga1dI0dHYZhmLCQ0D06bVrpGgsdhmEYJrqOjoUdHYZhmLCSkEInNUlxcrq1gaHco8MwDMNEB4dLdXRcHEbAMAwTVaGzYcMGXHHFFSgtLYXBYMCrr77a533Wr1+P2bNnw2q1YuzYsXjuuecQTaxm5WV3QR0Yyo4OwzAME+WBoRYpdHhgKMMwTHSETnt7O2bMmIEnn3wyqNsfP34cl112GS6++GLs3LkT3/72t3HLLbfgzTffRLQwGg1IthjR5VaFDvfoMAzDMFHCrvbomLV4ae7RYRiGCQdqN37wLF++XFyCZeXKlRg1ahQefvhh8fOkSZPw/vvv49FHH8WyZcsQzT6dbqcsXWOhwzAMw0S3R8fMjg7DMMzQ6tHZtGkTFi9e7HUdCRy6Ptp9Ot1a6Rr36DAMwzDRwa726GhChx0dhmGY6Dg6/aWqqgpFRUVe19HPLS0t6OzsREpKz//Qu7u7xUVCtyXsdru49Bd5H/19qU9H9ui4HV1wDOBxw4W/7YslePtCg7cvNHj7oku8vq5Ygh0dhmGYISp0BsKDDz6I++67r8f1a9asQWpq6oAfd+3atdr3tk4Tut1K6VpHSwPeWrUK0Ua/fbEIb19o8PaFBm9fdOjo6Ij2JiRMj47JyalrDMMwQ0roFBcXo7q62us6+jkzM9Ovm0PcdddduPPOO70cnfLycixdulTcbyBnJGkRsmTJElgsirh5/uwWtFcojk6qxYgVK1YgWvjbvliCty80ePtCg7cvukhHnYl86prJqfaL8sBQhmGYoSF0FixYgFU+bgktCuj6QFAMNV18oUVEKAsJ/f1TrRbUq6VrBkd3TCxQQn19kYa3LzR4+0KDty86xONritU5OkYpdNjRYRiGiU4YQVtbm4iJpouMj6bvKyoqNDfmxhtv1G7/ta99DceOHcP3vvc9HDhwAE899RT+8Y9/4I477kA0SfGKl+YwAoZhGCY62B1q6ZrLplzBjg7DMEx0hM62bdswa9YscSGoxIy+v+eee8TPlZWVmughKFr69ddfFy4Ozd+hmOnf//73UY2W1uKloZ6pdNoAlzOq28MwDMMkJnaXUrpmkKMO2NFhGIaJTunaRRddBLdb+U/ZH88995zf++zYsQOxREqSWUtdEzi6gaSBBx0wDMMwzEBwOH1K19jRYRiGGRpzdGIVL0eH4KGhDMMwzCDjdLmhGjowsqPDMAwTVhJX6CQZ4YRJXAQ8NJRhGIaJkpuj/MCODsMwTDhJWKGTmqRU7dmNarobOzoMwzBMlPpzCO7RYRiGCS8JK3SSLYqTYzOw0GEYhmGig0OdoQO4PQmg7OgwDMOEhYTu0SHssk/HzkKHYRiGic4MnSSDEwa3WsZm7jlHjmEYhuk/CSt0UpMUodNtkLN0WOgwDMMwg4tddXTSjQ7PlWZ2dBiGYcKBMdFL17SIaR4ayjAMwwwydjWMIN1kV68xsKPDMAwTJhJW6KRIR8fNpWsMwzBMdHt00o12TxCBwRDdjWIYhokTElfoqI5Op+bosNBhGIZhouPopElHx8KJawzDMOHCmOg9Op0u1dFhocMwDMMMMg41XjrVoPbocH8OwzBM2DAmeo9Op1a6xj06DMMwTLQcHZtyBTs6DMMwYcOY6D067Zqj0x3dDWIYhmES1tFJY0eHYRgm7CSs0ElVHZ0OTeiwo8MwDMNEx9FJkWEE7OgwDMOEjYQVOlrqGg8MZRiGYaKcupZikKlr7OgwDMOEi4QVOlazUSR4eubosNBhGIYZyjz55JMYOXIkkpOTMX/+fGzZsiWo+73wwgswGAy48sorMdjY1dI1dnQYhmHCT8IKHfqjRhHT3Sx0GIZhhjwvvvgi7rzzTtx777346KOPMGPGDCxbtgw1NTW93u/EiRP4zne+g/PPPx/RwKGWrqXC5pmjwzAMw4SFhBU6hBA6gzAw9GxTJ2wO5Y8ZwzAME34eeeQR3Hrrrbj55psxefJkrFy5EqmpqXj22WcD3sfpdOL666/Hfffdh9GjRyMa2NXStWSDTF3j0jWGYZhwkdBChyKmI126dqSmFQt//ja+/eKOiDw+wzBMomOz2bB9+3YsXrxYu85oNIqfN23aFPB+P/3pT1FYWIgvf/nLiBbS0UnWenTY0WEYhgkXZiQwFEjgT+iQ+5JkDo8G3Hu2RXw9UNUalsdjGIZhvKmrqxPuTFFRkdf19POBAwf83uf999/HH/7wB+zcuTOo5+ju7hYXSUuL8n+73W4Xl/4i79NlV2Klk93KYztNVrgG8HjhRm7fQF7bYBHr28jbFxq8ffG9faES7OtKaKGTmqQvXVPipU/Wt2P54+/hmrnl+Mknp4T8HA3tSjlCS6c6I4FhGIaJKq2trbjhhhvwzDPPID8/P6j7PPjgg6LEzZc1a9aIErmBsmvPXgAmODuaxM/HKs5g36pViBXWrl2LWCfWt5G3LzR4++J7+wZKR0dHULdLaKHjXbqmnE3bdqIRHTYn3j1UG5bnqG9ThE5rV3wqaoZhmGhDYsVkMqG6utrrevq5uLi4x+2PHj0qQgiuuOIK7TqXSykhM5vNOHjwIMaMGeN1n7vuukuEHegdnfLycixduhSZmZkDOhtJC5Bx4ycCxw4jN9UMtACjx0/GyAtXINrI7VuyZAksFvWEYIwR69vI2xcavH3xvX2hIl31vjAnehhBC9QzcS2nxZeqFqWErbK5E263W6SzhUK96uh0O1xhLYljGIZhFJKSkjBnzhysW7dOi4gm4UI/33bbbT1uP3HiROzevdvrurvvvls4PY8//rgQML5YrVZx8YUWEKEsItwG5W+CVe3RMVnTYIqhRUmor28wiPVt5O0LDd6++N6+gRLsazIneunaBtc4OA1mmBpPAPVHhcAhuuwuNHXYkZOmOj4DpL7NU9NNrk5ees8/lAzDMExokNty0003Ye7cuZg3bx4ee+wxtLe3ixQ24sYbb0RZWZkoQaM5O1OnTvW6f3Z2tvjqe32ksathBFa3jJfm1DWGYZhwYU50R6cdKajMno1hjVuAQ2+iqvkc7feVzV2hCx3V0SFauxwsdBiGYSLAtddei9raWtxzzz2oqqrCzJkzsXr1ai2goKKiQiSxxRoyXjoJ6kkxHhjKMAwTNhJa6CQnmcTXo9nnKULn8BpUNk/Tfk/uzuTS/tde+wsjIFq4T4dhGCZiUJmav1I1Yv369b3e97nnnkM046WT2NFhGIYJO7F3emsQSbUoQudAxrnKFSc/QHNTo5ejEyp1XqVrnLzGMAzDeHC43N5Chx0dhmGYsGFM9Dk6xFljGZAzCnDaMKnLM9hT9usMlG6H00vccPIawzAM469HJ0mdo8OODsMwTPgwJnq8NNFhdwHjlorvLzbuCJuj09juLWxa2NFhGIZh/PTomF3co8MwDBNujIkeRkB02p3AeFXomD6mwE/xfWVTV9jK1gguXWMYhmH0ONT5PRbu0WEYhgk7xkSPlya6SOiMWASHKQUlhgZMN3vP1NFDs3Ve3FqBIzWt/UpcI1o6uXSNYRiG8eBgR4dhGCZiJLTQkT06HTan+ONyOluJlr4me7/4erZJGRqq5/0jdfj+y7vxo1f29Pn4De3s6DAMwzB99+hoQocdHYZhmLCR0EInWV+6BmBP6nzx9QJ8JL52O5ShoXr2nW0J6Pb4Ut/m7ehwGAHDMAyjh3t0GIZhIkdCCx1ZutZJjg65NYZZ4uuwtj0Ylar80Tnrk7x2tLZNfG0OogytThU6SWblbWZHh2EYhukZL+1mR4dhGCYCJLTQkWEEokcHwP6OLBxwlcMIF5an7hPXVfkkrx2p8Qgdlzr/oK/StRG5qeIrDwxlGIZhfAeGWqH728CODsMwTNhIaKGjxUurjg7FSb/jmim+P9+9o0fENPXrHK1tV7/v26GRpWsj89PEV3Z0GIZhGN/StWToypzNLHQYhmHCRUILHa10ze4UDaG1bd14x6kIneldW4Wzox8aSilq+pK1vsrX6tTUtVGa0GFHh2EYhvFgd7k8QsdgAkyWaG8SwzBM3JDQQkemrlHpWk1rt3Bp9hgnwG3NRJqzGTMMR70cHVm2Jmnq9A4bCFS6NjKPHR2GYRjGf7x0skH9W2Lh/hyGYZhwkthCRy1do9KBUw0d4vu8rDQYxl4ivr/YtMNraKgMIpD4JrIFLl1L1YSOb1w1wzAMk9hhBJqjw2VrDMMwYSWhhY7s0SGO1ym9NyWZKcC4peL7i407vWKkj9YotwmmdI2S3GTvjyxdszldIrKaYRiGYQgqm9aEDjs6DMMwYSWhhY7VbITR4C10irOSgbFLxPfTjCdgbzqruTBHfB2dXoROvVq2RtHSRRnJMKjPw8lrDMMwjHcYgfp3gR0dhmGYsJLQQsdgMGjla8dUEVNCQie9AK6S2eLnBe4dWonaUbVHZ7Tq0LT0JnTUsrX8tCQYjQakW83iZ+7TYRiGYfTx0p4eHRY6DMMw4SShhY4+kOCY3tGhN2bCMvH1E8YdYmgolaKdaVIS2GaPyBFfmzpsfTo6uelJ4mtmspKkw0KHYRiG8RsvzcNCGYZhwgoLHVXoVNR3eBwdYpxSvrbIuAfVDS1aEEFuWpLWc9NbGIF0dPLSrOJrRrK5TxeIYRiGSSwcLhoYyo4OwzBMJGCho5auUfINUZylnlErmYUWYzYyDJ1wntykCZ0xBWnISrH0GUZAM3eIPNXRkUKHHR2GGTjUL/eDl3fh1+sOR3tTGCZs8dJWg+zRYUeHYRgmnLDQ0SWveTk6RiOOZi8Q32affgdHa5XStjEF6chOtfQdRtCmlK7lpfmWrsWfo+NSRSLDRJrTjZ14YespIXR4v2PibmAoOzoMwzBhhYWOWrpGmIwG5KcrpWZETfGF4uvw+ve1IAIhdFKS+g4j0Bwda1w7OiTo5j2wDnf9a3e0N4VJAGRqITmwnGDIxAPco8MwDBM5WOjoHJ2iDKsQOxLHyIvgcBtRZKtAe9URcd3YwnStdC24Hh1Zuhafjs7esy2oa+vGmr1V0d4UJgFo050okCcTGGbIp66xo8MwDBMRWOjoHB2ZuCbJyy/ENvcE8f3opg/8lK71nbrm26PTEmeOTlu3Q1t0dtji67UxsUe7bh9rZKHDxAHkTmrx0uzoMAzDhJWEFzrJOkenRAYRqJRmpeAd50zx/aWGTUgyG1CWk4JM1dHpsrvQZXf6fdwGn9Q1eZ94K7fRn2E/q8ZvM0ykaOv2HG/s6DBDHZpF7TUwlB0dhmGYsJLwQie1F0enKMuK113notttwTzjQdySuVWUtmVYzZAVbv76dCgZqi5BUtdaVUeHONXIQoeJLO26/a2BhQ4zxJF5GtyjwzAMExkSXujoe3S0xDUVq9mErrQyPO74tPj5G12/B9rrYDQaPH06foROu80Jm8PlM0cnPnt09K+HErEYJpKw0GHiCacUOlrpmicMh2EYhgkdFjqWwI6OvO5p5+XY7ypHuqsFePOH4vreZunIaGlyi2QPkGdgqCNuS9dONypDVxkm0j1hBAsdJl6EjmdgKDs6DMMw4YSFTpIiQPw5Osp1KXDAjB/Yb4Wb3q5dLwKH30JWalLA5LW6Nu+yNSJTlq512+N24XmGHR1mEIU1Cx0mbhwdrXSNe3QYhmHCCQsdi+ctKPYJI9CLn4/dY9Ew9Wblyv/egUKrI6CjIxdguWrZmvfA0Pjt0eHSNWYwU9c4jICJF6GTYpBhBOzoMAzDhBMWOmppmcEAFGb0rI/Wl7OlXnovkDUcaK7A59ufF9c1ddgClq7lqzN0vHt0HCKsIF7QCzcWOsxgpq5xvDQTP0KHHR2GYZhIwEJHLV0rSLfCYur5dlDENFGWnYKU9Czg8kfFzxc2vowZhiP+e3R8Etf0PTpOlxudASKphyJtujACGhwaKG6bYcIBhxEw8YRTyazRxUuzo8MwDBNOEl7o5Kq9NiPyUv3+/tzReSjNSsZnZpcpV4xbDEy7Bka48HPLM2jt6Oli1Lf1LF2jYAKKpo63QAJ9jw5xhmfpDClcLje+89JurD2j5qUPof1NDuVlmPhJXWNHh2EYJpx4OvETlAVj8nDfJ6dg3qhcv7+n0rWNd13ifeWlD6LrwBpMsp/CnNN/AaAMFfVdgOXrHB2DwSBcHQovoEhmfwlvQ7k5nDQczYSg8rUxBenR3iwmSA5UteLfH1fCajQOuTACGtjbYXMgVRcowjBDOoyAHR2GYZiwMjRWNxGEXJabFo7EpJLM4O+Ulo9dU74vvl1W9xxQd8Svo6MvXfOKmI6jQAIZRjAyP0185YjpoQWVGxLdLgO61dlPQyWMgODyNSY+4qXV0jV2dBiGYcJKwgudgdI87ipscE5DEv2B+s/tVAPUo0dHX7pGZFjja2golT3JUqKJxRniKwcSDE2hQ/jrN4sEa/dVY/vJxpB7dAgWOsxQhufoMAzDRBYWOgMkOy0JP3R8GZ2wAiffBzY9AahpajJ1LU+XuqZ3dOIlYrrD7pQvGROLM+N2ls6u002oau5C3AsdPzOhwk1lcye+8vw2fPX57QO6vxTWci4VR0wz8RBGoAkddnQYhmHCCgudAZKVYsFpdyGeMlyrXLH2HuCPy+E+u0M7y5yf7uPoqBHTLXHi6Mh+CSr/G1uYHpelayfr23Hlkx/glj9vRTwih9sSTYPg6BytaRfimASWrZ+lcg6nS/TlEMPV8JAG3fYzzFDD6TaIYBsL1JNf7OgwDMOEFRY6AyQ7RREtT3UtheuiHwHmFKBiE/D0xbjf+DTy0IycNOU2ksyU+HJ02rrtmlNVnpMal6Vru043i5CFk3XxJeAkda0eR4eCMiKNXgg3dfZPpHTYPNHlw3OV/a3RzxwrhhlKpWtaEAHBjg7DMExYYaEzQDJVoeN0G9E6/w7gW9uAqVfDADeuM7+D9cl3wrrlKcDh+SOWqQ0NjQ9HR4YqpFvNKMtRzkTWtPY9S+dYbdug9YOEypGaNi10gWYgxRu1utK1wXB0TumETn9L5WTZmsVkQFGmsiDk0jVmKMNCh2EYJrKw0BkgyRYTki3K29dCC8SsYcDVf8C+S/+B3a6RyEAnsOZu4KlzgUNviv6deOvRadMJnZxUi5gVRFT20s9SUd+BSx55F1/58zYMBY7UKkInngRqoNK1wRCfpxo6Byys2rsVAZ1mNWvzr7h0jYkboWOyAkMk5p1hGGaowP+rhkB2SlKPkp8DSVPwSdv/YWX2HUBaAdBwFPjbNcA/b0KuucsjjOIAeYadBBzNCRqmujq99ekcrW0TPRo7TjWJ1LZY56jq6MTboFd/YQSDUbqmd3Qa++nGtNk8wjpXjW5v4NI1ZqgLHR4WyjAMEzFY6IQYSOB7JvxgdSvcMOLsqKuBb30ELPwfwGgB9v0bV22/CWMMZ+LS0SHKslP67NORPRXUiH62Obb7eahU7Vhdu/bzUCm3CxYSmvp45qYh4ujQ/iYTDTlemokbR8fCQodhGCbcsNAJgaxUS4+m6sPVigMwrigDSM4Elt4P3PwGkFGKrPbj+HfSjzGx6V2vx1l/qBYfVBvw180V+NPGE+JCJV5DZVioTJMbpgUSBN72Rp1rcFwnImIReh36ZLB4ScvTi05931GkhVynzRlSnLWcoUOlazmydI2FDjPE46U1ocOODsMwTNhRTsUzISWv6Ut+Dla1iq/j1bhlQfk5wFffRdOfr0d2zRZ8t+l+4K024BM/xuYTTbj1+R1UoA0cO6Dd5eVhp/HabYsQy8ielXS190iWrvU2S6dJV2pEQuf8cQWIVajMTk+8lBz668/x/Wwiga8A7m9iWptO6OSppWtyZhXDDFVHx2pQ/1/haGmGYZjYcHSefPJJjBw5EsnJyZg/fz62bNkS8LbPPfec6N/QX+h+8Vi6RmeczzQpi/zx5OjoSS/E8RV/xTOOFcrP7z8K/OUz2LbviPgxP9mNZZMLsWJasRZrXNPaNSRK1zLU0jWPo9N36RpxrLZ9SCSuxWvpmt5dIZoi3IOk789Rnq+fjo4aL51uNSE3zaol/9nl1EWGGcqla+zoMAzDRF/ovPjii7jzzjtx77334qOPPsKMGTOwbNky1NTUBLxPZmYmKisrtcvJkycRD2SrpWtyAXxYXRgXZFiRo/YQ6MlITcXPHF/Ad3E7YEkFjr2Dz370BUwxHMfiUhd+c91MPHX9HEwpzRS3/+BIHWIZeYZd69HRwgh6Ezqexe2J+qEldOKtdE0KnTQ1LS/SQs53v+ivg9Su29/oJIPBoFzPs3SY+OjRYUeHYRgm6kLnkUcewa233oqbb74ZkydPxsqVK5Gamopnn3024H3IxSkuLtYuRUVFiAey1T4B2WtwSC1bm+Dr5vgMDH2pez5cX1oLV84oFLpq8HLST3BN98tAzX4RQy3Lud47XDdEenS8S9eqW7sCTr33LV2LZY6qjpNsfI+31LVadVjomIK0QSldO9WgODr56dYBpbzp46VNRgP36TBDHnZ0GIZhYkjo2Gw2bN++HYsXL/Y8gNEoft60aVPA+7W1tWHEiBEoLy/Hpz71KezduxfxNDRUhhEcqlaEzriidP+3V5v2KV65PWcCPlr2CtY5ZyHZYMfs+ldheeZ84NezcEPL05hrOICNh6rhphvHKDI9Ll19XSQIaLYQbXJlgES1xna718I3kCCKNvS+S0dn1vCcOC1ds3kJnU67q89hr+FIXJtWljkwoaOLlyZyZfIaz9JhhnIYgYyXZkeHYRgmumEEdXV1cDqdPRwZ+vnAAU8jvZ4JEyYIt2f69Olobm7Gr371KyxcuFCInWHDhvm9T3d3t7hIWlpaxFe73S4u/UXeZyD37Y2MJKM2D4Qe+0CVsp1j81P9PpfR7RZT3e1ONxrbuvD+KRset/8v7inZjeVdb6KofT8MjcdR1vgHvGQF6uyZaPr7cmTM/CTcI89Xyt2iQKD3r1UVeGRUyd9RxDQ5ISdqW1Ga2bN8T19mRIFfx2patIV2uLcv1LIuEjZUHjWtNANv7a9GU0d3TO1/oVLTogiP8pxkGOCGGwbUt3aiMENxXMJNRYPikE0uycA7B2vFvhDMeyJv06oKzWSzQVyXrTqktS2dUX1vY/XzDRfx+rpiAafbwI4OwzDMUE5dW7BggbhISORMmjQJv/vd73D//ff7vc+DDz6I++67r8f1a9asEWVyA2Xt2rUIJwebqEnAhNM1DVi1ahV2V1CvgwG1R3dhVc0uv/dJMphghwGvr3kbq04axcydvaapyB0zBSZnFwpbd6OkaTuyG3ci39ACHHpRXJwGMxrSxqEuYzJqMyajKXU03AaltyKcUHXWyv0mTM11YUmZu9f3r7JOeb17P/4IjhPKbZPsJP6MeGPDFjQd7OlG1bcq90kxudHpNOClNzdgWm54XKtgPl8SV2+cMqIszY2ZeYGf90gz/WtGbpIbVScOis/5aMVZrFp1OqLb5w9yyGQ/SjjZf1z5rGpOHkGq2Yh2B/Dam+tQGiE9fbxG+ey7Kw+L95NEFR03wXLs1FmxvScOH8Cq1v2wtSrb/97WHcCp6Duf4fj/hT7rvx81ItkEXDUqNtzOjo7Yj7of0qlr4NQ1hmGYmBA6+fn5MJlMqK6u9rqefqbem2CwWCyYNWsWjhxR0sb8cdddd4nAA72jQ2VvS5cuFcEGAzkjSYuQJUuWiOcPF+VnmvHb/ZvhMidj0cUL0bzpHXH9jZ9aos2W8eWRg++jvaEDU+eci1/v/4iW3rhh2bk48fEmfOLSK2CxXCVu98f3jmD9W6/h5ty9WGzcBlPLGRS07ReXSZUvw23NgHv4QrhHXoDagvlIHzYVVkvounXV7iqc2LoLHYZUPHrrhb2+fz/ftwHo7MLiCxZiWlmWuO5Dxz7s33oaueXjsGLxWK/H7rY7Ydu0Tnw/d1Q+3jtSj7yRk7Bi0ciQtrk/n+/m4w1Y8+E25KRacNcXLhL9Y/7425ZTwL79mDqiAIvmlOHvRz+GNSMHK1bMD2n7XAYTbvv7TkwfloVvXTwmKGfpmqe3iNs/ds10hJOnT24CmlpxwbyZePvsLiF0ps89F/NG5iLcUDR3pzw+rrgYvz+4ATaXAZcsvRRWszGo9y8tOw9obMT8OTOxYkYJNjn2YVfDaZSMHIcVn/De1waT/v7/smZfNVKSTDh/bH6P352s78DmD98X3//mK0uQbAn/yYz+Ih11JkI9OrJ0jR0dhmGYsNOvlXFSUhLmzJmDdevW4corrxTXuVwu8fNtt90W1GNQ6dvu3buxYoUas+wHq9UqLr7QIiIUoRLq/X3Jz0jVIm6PNyhR0KVZychVr++tr2frySbRE0HJbRNLsnHiY+/tO39SGR5YMxU7mmdg5z3Pwtp8Aji+Hji2Hjj+HgxdTTAcfhM4/CZIYtphgSV3OJAzAsgeDmSPUL9XL2n5QdkCB2uU8qKa1m50uwxaP4S/90+mrmWnJWvXD89T+pOqWrp7vNf1HUr/BzWSzxyeI4RORWNX2D6TYD7fA9XtWvpbY5cLRZn+FxfH6z0x4bnpypnW1m5nyPvf1opmrD9Uh60nGnHHkgkBhZbkuQ+P4FRjJ6pbumE2m/u8fX+ob1POJBdlpSJV/ZjbbO6wHiOSypoOrY9rWG46jAbFXeuwu5GuHhN90aH2D2WlWsU25qcrn11zV2ifS7gIZv+j4JL/eXEXzEYDPr53aQ8hI/8fIToclNQYG6+LiWQYATs6DMMwkaLfFgA5LTfddBPmzp2LefPm4bHHHkN7e7tIYSNuvPFGlJWVifIz4qc//SnOPfdcjB07Fk1NTXjooYdEvPQtt9yCeJmj02FzYs8ZUeuEcQES1yQyoeyt/UocN509N9Kqz4eJxRkinYrO6G+vaMLCMWOB/LHAObcALidQtQs49i4qd76J7NptSKGzgg1HlYs/TFYgswTILAMyS4EM3fd0KZgAWDOwr9Jz9vZEXTumqk6NLy6X2xMvrb6mviKmZX8ODVodrfblHK/zjnCONPsrlcAI4kBVa0ChI4eFjilI19LywhFGIAfK0kwYejyZ3BdoUfyXTUoUu83pEulieWpiWTjCFurblT64/PQkpJqp9MsQseQ1OSx0WG6q2N/p2CGxSbN0CgN8BoFT10xeYQT1Qyh1raqlC06XW1xojtRkNUreX6Q57R+B9k8mnkrX2NFhGIaJGaFz7bXXora2Fvfccw+qqqowc+ZMrF69WgsoqKioEElsksbGRhFHTbfNyckRjtDGjRtFNPVQh0QLnWCnuno6Q09MKA5O6EhBMW+U/zIhOnO/aGweXt15Fu8frsPCMboyF6MJKJ0lLr9rWILnTx9FiaEB/7mhHDndlUDjSaCJLhXK962VgLMbaDyhXPw+IT3mTFxSOQwG43hsc03AsV6EDp1dl4FwGVbPGV8KIyDk4FS/QifVglH56VGJmN6vE3IHKltw4XglytuXo+qCc2xhupaWR+VXoSKT+aQY7E3o/GnTCW1IJlHZ3BU2oUOLaArFkC5Lmvo/QX+T0IJFCt9yVQjT6xZCpx/Pp5+jQ+SlD73UtXrdkFbaF/oSOkwCpK5pc3RY6DAMw4SbATV1UJlaoFK19evXe/386KOPiks8Is9M02Jty4kGcd24Qv/R0hLf3p35o/IC3pbm6Qihc6QO3+vFIXBSIIK7AAesM7Fg8iU9b+ToVsROC13OqN+fVb6n65pPKded2Y4bsB03JClpQHVrJwJVl8Aw7FxYHJ4FOtGmRktTCQ5FSktkYhfNaHE3HIeBSu0qPgSyyuBIvlj8juafjMpTHB0qyaIFLM1GiTR2p8trISndFV9oe842d2mOjsmkOG7dDiV+OZS+Cf1z0uI/kJCkbXj2g+Pae+xwuVHV3BXw9r1B7puvayiHhZLwtlpMWukaOSyRnKFTnpvqNWy3P8M+23RzdLzipYeQo1On21a96JUcUZ1E/XwuJlF6dLh0jWEYJtxEfnUZ50ihI4cv9uXoSHdAnpmeVJIBN5Wi+WHROMXF2X2mWURY56gLOz36xRKVWy0Y40c4ma1AzkjlEoimUziw+Q3sfO91zDfuxyhjNYra9gOb9sOM34A6qtwVvwDKZgsnyZk6EZlohzE529M30tGA4jPv4mfm53GecQ8Mv/YOrbgAD+O/SSOxz74MWY5RYqFKi1RydQaygO8v9P5QCZi+dC3Q7aTTQe85CQXp3LV02QcsdKhc7FB1W49yLn/8fUuF2K9G5KVibEE61h2oQWWLp38jWDpsDlz62HuYXJKJlTfM0a6vbVUWVwWqQ6SUrkVuaCj1GemHylL5Yn8W8/Te02vROzrawNAIDzqNnKPT1mP/kE5isI4OOaf//fgsRuWnYemU4AJhmFgdGBqZWHeGYZhEhoVOiNCCTemigFbqFEzpGjFnRA7MJiPsAYQO1eePL0oXC6IPjtbh8umlPc7K6/sT5AJ9QGSXY33yJfi5owxpSSakd9XimoKT+N/xtXCfeB+G+iMwNFcAdNn3KsoA7EqmVN8S4J/nKiVyZ3fAAjeuV18ixV8bhp0DjFwE1OyH89CbmGo8gakNvwMeeRp/TJqJPxvn41TluEEROrJsrSQrWZSBkbtDLo/FZPTfn6N+luSGZFjNInSipdOBwt61bEDIJZJ9TYHK+4huhxPPvHdMfP+1C8do210VYAhrb9C+U9HQgVONHV7OmXR0qA+MSLNEtnRNc3RypKOT5DVsty9sLiW8wF/pGp0EIJEQzqCGSFHfFtjRIXdTv38Ectdon337QA1e2FKB9YdqhQhMMhuxy0+4ATOEhA6HETAMw4QdFjohIlPUiPLcFKQmmYMWOoH6c3zL12ixSn06vkLnkI8jQYM6Q2HfWWVBfcmkIrz2sRN/ai3EnZcvhcPhwJrX/oll04tgrt4NnP0IXSe3I7n9NMrdlcDeVzwPkj8Br7aMw3/aJuDLX/gCFk4erf3q8X9vQv2Wf+BrOdtQ3rYLM2w78HDSDjhW/RE4eBEwfD4wfAFQOjsi9eoyiGDxpCK8/NFpESJBgQu+ARKyvE0vWrNSLYrQ6Rq4EDjocwbfX2AD8a+PzohFb1GmFVfNLsMf3lcWQlXNHjcgWKTTSIthEkxz1ehoTehkKGJBK12LgNAhEaL16PQoXQvu+dSqNeGspSaZvBwdKusjAUqfUawjAyAIEp/kUsn/M/RllYEcHQoxuOKJ93u4kTaHElZRqvbIMUMwdY3DCBiGYcJO7wMsmD7RN5NP6CNxzbd07dzRfQsdWb5Gjo4vB9UzwlRiRejLXgaCDEhYMU0pgaGFvex/cJjTxMweLPo2cM2f8falb2FW10r8X87/AYt/AnzqKeCOfcBtW/BS4f9gnWsOKju9S+3O2lLxV+di/GfuH4HbP8aHI7+Bo64SmF3dIiYb634K/HE58PNy4A9LgTU/Bg6sAtrrEQ6kM0IN4BQbHah8TS44qT/H93MLpUH8sCp05CL/jB+hQwvZle8qyXm3nj8aVrNJOFBEVUvngIUOIZMB9c6CdHQi2aNT12ZDp90pREpptvJaslNURydIodOlCp20JE/ENrkX5D4OdvkaCTe6hOro0EPoxc2RGu990V/4RXVLl9hnqeXqqxeOxjvfuUgI4qHWq8Towghkjw47OgzDMGGHhU6IyF6DYKKlCRlVTEMSp5Vl93n7uSNyxKLmVEOnaEbXI0tflk0t1kqhOnUpXf2B7ndMLdmaPTxHS08LlIpGYQSNyMSxrHOBRXcAs64XgQNEobrwolk8emT/hzgTnzMSjXP+B5fYfoU7cp4Alj0ITP4UkF4EOG3Aqc3Axl8DL1wHPDQaeHwm8OINwIaHgENrlBCFfi42pdCZVJIp4rsDBRJIZ0zv6IQjeU0K04vUpDd/PTokRmhoJDl/n58/XFxXnKl8FlRuF4rQ2as6dn5L1yLYo0POBVGcmSyEm17sNQdZuiYdHRktLcmVyWs6pySSUNnYZb9+Hzc+u2VA9/eNwtb36cggAhnu4U9Uy/AGSt+7a/kk0ZuTl2b1+kyZodqjw44OwzBMuOHStTDN0gnW0ZlQnClStBZPLhJ19X1BKW3kQOw50yKS3T45w1O+Jhfp547Owxu7K0UZEAkT38jaYBfh1ANBM1UKMqxiAUXCiR5vRlnP1yVLuPQDRSWFGcof7JpW74W5LFPKURe5o8QsHQPWNRbBfe4NMCz4hiJeGo8DFZuBik1KYlvdQeU6uux/zfOAaQVA8XQYC6dgXNVZGN/ZAZA7ZGsH7J2AvUO9dKIrpQiXd2Zih3E8JuRfogmdA1UtPRayVM7Wo3QtJXShIx2dT0wqEml6shRO7/JJ8TqtLEsradIcneaufvei1LZ1BSV0Ilm65omW9gzS1UrX2oN1dJTX7JvOl5tmFScB9E5JJCEXTjqf1E/jb/8PJoyAxDYJ78O6Ph3p7swYlo3Nxxv8Cx31/crVOcmyV2mw3gMmfFC6pTZHhx0dhmGYsMNCJ0Tkgo0YV9R7EAFBAmLrjxZ79fb0xTkjc4XQ2XrcI3T0CV4ksEYXpGP7yUbRSD8QoSP7c2gBRgtp2k6KtQ7o6PgZFuobMV3T0h1gjo6yMBupRkzTgp9EkIgLpkV87mjlMvM65Y4dDcqA1Mpdnq/1h4H2WuDoOpiOroOYylQZ+PWRVPiJfMsf/hmuyp2GDnMxTp6ZArSPAtKUEkF6vdTzQX0gJbphjdKJo20daInKUfW9nFWeLcQevWZaOGeWWHosdvUx5cWq0KGeInp+vbjuj6NzuKZV9HKQwK7VSte8e3SoxCzUCO1AQQQycc07jKB/PToUCqEnVz3+BqtsS99jQ8Kzr/CRHvdX3/eFY/KE0JEuH3Gkpl0LKQkkdGSJXo5Mj9CVrnLp2lCPl2ZHh2EYJtyw0AkRKViovEzf09Eb/mKie2PeyFz88YMT2KrO6tEneJE7RKJkTEGaJnQGwr5KpX9DiqSR+Wl9lq75W3h6l655OzrSLZDikBbTpVnJ4rUcr2tDblqAnqXUXGD0RcpFYusAavYBlR/DWbkLp08ex7BR41Fvt+D5bTVwWVJx+6XTkZScLmJbt2zfgvYjGzHfchSpjjZk1mzBN2jTba8BDz0IpBWK5DlDdw5+YE5Gcu5IGA8raXTIKg/Z0antIrfILXpKaMFflpOiCR0Sl5LDMghB5w7S+ySFES2uByp06PnJMaKEuzr1+nxVlKaYAJPRIHqEaIEdTqEjS/SGqUEE3vHStv716PhxdAazR0fvmlC/TH+EDgnIVvUEwYLRefjD+8c1l49itqXLRqWjgcoIKWFOP0OIkENk6wapfI8JH5y6xjAME1lY6IRIrs6diFS0q0zKorO/tPihs+EycW10QZo4Qy9Flm/yGi10b/jDZpE09p1lE/p0dGjeinjcvoSOumDTp8jpY7F9e3RoFo1Xj44Kla+R0DlW2445I/oOZ9BISgWGzRUXl92OnatWoXTZCnywpxpPbP4YcALlxmn43Eylz+Wve0bh3/bz8d2Lx+Gb09yiB+jf/3kVk50HMM54BmivEZdx5KbQS2qiYTa/0Z7u+0YrbrGmAB9nA5XFQEo2kJzt+UpOlKNLGc4qv1L5nKMbJnsn5lfZcKNpDGx502Gwd2JYdqpw6Xwjpsl18Td4lt5TEjqVzZ19zmrSU6sunqnEij4z+pynlGZqi2o5R4c2PzPZLJ6DBKn8DMMBlZYR5TpHR+4DQaeuufwLHVm21TBIZVt616S/PVPyvhaTAXNHKmKGPv/WLjuO1LZqZYolamBDc6cj4GPoQ1C4dG3owqlrDMMwkYWFTogsHJuHT80sxbIIDuujnhkSNCQGtp1oFP09spdDpodpQscnee21j8+KlCbqk7hjyXhx1t4XOosv08doEUyQSySFDokUX+SZaf89Op7SNdlT0trl0Oag6Mv96Hk+OFKPE/WhRWNLKuo9wuH5D0/i2nPKxfNrQQSlWUBBEVAwAS/vnIjbD9Xil5cPxzWjnTh+9AD+svo9DDfV4/qJBphbTgPNp4DORpEMV2ToBrqbgFMn+rVN1Ik1ky6W94FGAA9+Fz9NHonFlmHIOEBi7VIh3LqaazCz+W1cbGrF9MMfAfubgY46oKMej3a24IzFgNHri4D9+YrQozPAljTla0oOkF6oXMidSiuA22TRHJ1FY/Oxem8V9pxtxvLuYnQ7XLpFsltzWRShY4tIGIGMliZkFHSwpXKydM13f9OGhg5a6Zq3o9Ov+7Z53BgSKnSc0MkAcvH0keZSxJB76NuTJT8brx4d1d3RDyNlhgb0fy/36DAMw0QOFjohQg3jj39uVsSfh8rXSOhQ+RoJHVnbLwMQ5HDLY3VtQpjQkEvi7QPV4iudzafwAn/9Oyfr20X/B6U9jcpXHofKq6gsjhbE1T7paQQJFyJd10jvG0ZAi1gSRNRsL/tzqPdFJm8R8vkCOUf9hYZj6pvvd55qEqVh0unSl4lRIMGGQ7XYU2/ANYtm4k/bLHjOmYFPTi3FTdfpPtPuNqzZuhePv74Vi8rMuOsTJUBnE9DV5PlKIQq0UKHp5nRmVnxVfnbAhH+ufhuF3SewIOUUUm11KOw8hqtNx4CKDcCzj4inoXftCfl2bvJ+XZPoYlL7kHrpRfIiOQf/MaSizpKFPMd0OI2lOHY6CXVto7TPgvZfu11XUlgfvMsS7ELurOpa6YUOlTzSLkrilxb0fQkdTxiB9+20Rf4AhY7D6cKX/7RNlAY+FsRxrHdNfFMQJbTP0bE0sdj7WJOlZTIljU5SCKFT3eoVaS5LE21OF7rsLqSoEdpEgwz00JeuyfI97tEZchjcTpgM6hkgdnQYhmHCDgudIQIFEryw9ZRIXiM0R0ctY6KyICqJoYXR2eZODMtJFSUxm495+nq2VzT6FTpykCYlwknHx2wyYnheqhBX/kRIWy+pa7Qwo4UsiRxydfRCR1+2pi+Ro+cJp3tAZ81p4UeuzpfOGyUW3LSQp4hjiRSJ5GZR2tp/Pj4rfv70bCUmW8OaDnP+SOx118HozgImL+rXNrntdjz8n1zU2Q34203zsbDQjh2b38aGd9/CwpRTOCf5NOB2odmQiX1NFiAtFwumjgdS87TL6r3VeGfPSZw3PBWfnJyllMVRn5JMlqPABiq/a6MSvFrA5YChqxHjjI0YhzPAyX14Jglw1DyGzhdn4XbTSBxOOQdwesqj5AI72MjnYHj7QI3oDaJ9U//ekxAn54I+IxJWhX2UyskenXSrt7CWvSpy/+ovtG+/e6hWfP+/Syd4iTF/6GOs/ZWuUX/TNb/bJETk9ruXeDmoUiTJUjMSOhT4cbCqTfSoSUeH+rj0/VJ6oePp0dGFEaiPR/OKmKGFxW2j4En1B3Z0GIZhwg0LnSHCvFFK/8ru083CnZFNzHKxTsKE+oSoDIbcCxI6Gw7ViQQxyfYTDbjh3BGBgwh0bgcxKk8plzte3wGlo6Bnjw71dfiDAglaax0ikIAWb75BBBKZxCXP+ocr4et/PjEWP/nPPvx3V6UWJT2pWEmUk8heF3K6yNkhV4BSyM4fqySw6dHm6KgCrz902Byo79Y9Z7oVSVMux6PrsvFnVxK2/+8S8bvfrT6Ap9YfxfUThmPB5dO8HqPFdgovfrwLVZYCfPL8eb0/ocslXKZdBw7iwZfew7SMDvxgWisqtv4XIw1VyKjdjjss24Hul4FfPgDTiPMwpdGNbHsqPmFuxbQdGcDZNMDlFIIJbqcy28hp93ylHiT9dVQ6VzAeKJgI5E8QpYG72zJx+ws7xCZdM7dcWfST89VRDzQcw2fN7yPVfBJ5b74A5OQAJTOAkplA0RTAkhygdM3b0ZHOxkD7U2T0NbHxaB2uzVV6ugZaukbCiZLt6EK/L1XnUSnb6B3pPV5NaaS+LFm6SccK7aMkOkkENnXatNQ9vWujP2EgH48S4fobPx5vPPnkk3jooYdQVVWFGTNm4IknnsC8ef6Pl2eeeQZ//vOfsWfPHvHznDlz8MADDwS8fcSEjigeNcBg6l9IDcMwDNM3LHSGCCQIqFGZziK/tvOsKCmj8hj9GWgqexFCp6YNF44vwDq1bE3O7CBHp9cgAh+3R/bp0FyZHkJHK10LIHQykoXgkj0igRwduYij2OT2bkePZvP+QO9Jlbr4vHxGKV766LRo+P/N20fEdRNLvJv4aVFJi286a77y3aPiuitmlArR6IvH7ei/0KHYYFrIUJmVTMgiISoXziSEqIRMJq75BhH4ztLx5dUdZ8Tv54/OU64wGkVSXYV5BDa5GuDMzYXx8gX49smrUHf6MG4oPIayhg9xkWUf0rtbYDz0BsbS+0H3pbefjC3F3Oofp72HaI6FFf9ACZpzRuFcezbwu+NAw3GgWxHWd8nnO65eJAYTUDhJEz6GwikwOUgIpPfYP2Q/GIU0vLi1Atee40eokBgzGAFjz/K40zqBTb1ifu8fqHTNj9CRQps4U9uI0vpNwPH3AEsqUDfVq9xOurE0JFbGbMsUNyl0KI1Nj7/jSLpa5OZSCWoox9BQ5sUXX8Sdd96JlStXYv78+XjsscewbNkyHDx4EIWFhT1uv379elx33XVYuHAhkpOT8Ytf/AJLly7F3r17UVbm4+pGCLMUOubkhBaoDMMwkSIx/yIOQeiPIJWvUbgAlWMR4wozvEpjxhSmAXspea1NlL2sP6iU5Ny5ZDy++vw2kX5V09LVo0xIDkDs4eiIgZ4Qjs4sdQ3do0cnwKJKi5hWZ+k0BnB0aCCqTASjhWOwEd3+IFeIDAMqG6LFJLlX3395tzb7Rt+fQ1BfCIk56o/YekIRgZ+eVdZrjLi/BvG+OKQKmAm6OUu0kJXlfbTdYwszPDN0/AyelUKHFvS+IvXbL+4UZ/W33b3Y63dSZFKYBTG1LBN/OVWAX9YWwumaj+tnleFn851wHlmPY3u3o8FSgA9PtmByWQ6WTC1TBIfRrAgEkwWgM84mq+d7s/q90QK0VQO1B8VwV2f1ATjrDiMF3ZhqPAF0ngD2+b6hw7DPVoCdbTmYMnUGZuQbRFQ4Kncqjk/1HuWy86/iP6m/0j5nTYHrwzLg+Cgga5i4lGeV445xndh0tBabXnkfmducWDLMCXNbJdByBmg5q5T0kdAonqY4RqUzFRGVP0HEe0s2Hq33/mypPLC1Snlt9F5kFKG1zVNiScl1VPKo4XKi8+Q2fN30OhYZd2P23w8DLo8w+iqA85NGoKX+k0DjLRhXWNZjkK4UQZkBhLUUOvp4adrf6aQHCR0SR4kqdB555BHceuutuPnmm8XPJHhef/11PPvss/jBD37Q4/Z//SvtVR5+//vf4+WXX8a6detw4403Dq6jw/05DMMwESEx/yIOUc4ZpQgdmSAmE9cko9XGfhI6O081ikUPlZZdNKFA9N8IV+dkI5ZPK/FarFW3dIt4YVni5evonKzvAHRCh8IO2mx9OTpWr/Ief9HSeleHFvnVzaEJHVmGVJ6TKharn5xRhv97fb8mynyFnCwl8zSCp2FaWZbfx5ala1QJ2G5zBhR4/pCDXX0HytIsHeoPOtWo9FRRKEQgR0fGPZNokw4Qse1kg/Y5yujxHkJHdZGmUOKcGhBA5GWkAmXj4Sqcjn1Nq9CQNxWPHj2A5RnFWHL+HAwE2jc+/8yH2NZVizkZzfjd8nTktB9XBFPeGGUQbM5I0Y/w+xd34l87zuCukomYceEY5QFIqZJAEaJHubjP7oChrRoZBhIeR5SLjtvpIl82mZiKkekN9TGd2qxcJOYUXGsehVJzGTqQjILuRnT8/lGk2eqA1kqgS3Ge9LxHYsOajhp3NqrdObC/9Aqs2cWYe3wzzI/djms6GwGp5UkDZZQq85866uE4/BYmG08Cx58AHn8CGWVz8e20afh7+xxUI1crW/OaM6QTOp02Sqhz9QgjoPtQIAFFVdN+0FefUTxis9mwfft23HWX8AkFRqMRixcvxqZNPskeAejo6BDBHLm5/mPuu7u7xUXS0qL8P0z3kYEe/YHuk+RW7uc2WQf0GJFEbk+sbddQ2kbevtDg7Yvv7QuVYF8XC50hBCWv6ZlQ7L0glslrVDK2bn+N+P7CCYWwmIyYMyJbCJ1tPkLnw2P1Wj+O75lgKZxoIa4/cd1hd4r1KJHh0xzum7wmZ+l4Sm4sft0KEhv9nUviS4UUOupCj5q4PzunHM9+cFw4X/6GO04sysDraowZuTmBnBo6Y55kMookLFp8DkTojPd5/mGq0CFXQcR4u5WeJ+nABHS+mrswWhWEOypo4A80QepX6KiPJ6PDJQVqE7tELq4H2tgv3cHNxxuQbLHgp1/+FHJ8ksf0yIhpWbYloPdfdWsw8TJxlcNux9IHXoOhqwGPXZqP6RmtQDNFf6vx3/QVBjRaCvF+dRJOOHJgTyvGHVddBENmGZBZqrhEZ3d6XKPKXYCtFaMc+zDKrLObzvhsJJ1pTy8SAszdVgWD04YcQ5u4TMBpYP9ucTPpA3YaUvG+YxLec01F+qTF+N71VyivCcCNj69Cec3b+P6wPcit2Qyc2YZvYxv+x/ocKpGL1Hoz8KjymTza3o1OqxNZay3ABrMIxDCkluDnZjdqDPlI21uvvEfi9ZWhOA1wNDWg+/THgMMAdDYor7mjUflqawU+9STilbq6OjidThQVFXldTz8fOHAgqMf4/ve/j9LSUiGO/PHggw/ivvvu63H9mjVrkJqaGpKj02F3451VqxCLrF27FrFOrG8jb19o8PbF9/YNFDo5FQwsdIYQdKafSr9kY38PR0ctNaMFLjk/xCUTldr0uSNy8ZcPK4Sjo+fFrafE1xU68SMpyrQixWISMdGymV7fn0Px0yQAei1da5WOjixd8+PoqG6Fv56H/iD7I8pzPQ3gNy0cgX9uP4U5I3L8RhhP1Lk8n5oZuC6fBFBmilkkW1H5WpmuybwvZO+NbD6XyD4dOhMvB69S2VogsSWdL2+h4/k8qaF9Rnl2j2GhUujQ/iLTvPRN7D2ERwjx0tRvQtD77Ruv7It094KZ29PisqLeXQr7yIXAiBz/jwdgVmMHvvfIBnQ2O3F59iLPMZKWLwISMONaT2BDwzHc/dvnUd59GOPyrNhcZ0VR6Qh8afkCIL0YyCgGkrM0oXKytg2fevh1jEhqwdzcbjTVnMKts9IwPrUNh07VYtyyW7DiHx043qi8nnM7crX7Eic6rNjovBifv/xu5GZ3A/v+jVPvPY/ytl0oo1xvettVE0mc0qC70keoHnvJOIDPyf+xX3vJ67W/rNwAWNPLm7ji4R4hD4zCz3/+c7zwwguib4f6dfxBbhH1AOkdnfLyctHXk5nZ+77uj26bDf/cvF98n5KZixUrViDWzpbSAmnJkiWwWPyf0Io2sb6NvH2hwdsX39sXKtJV7wsWOkMIiuQlwfLW/mqv1DB9eZUcQkhlXNS+Q2VrcuFJ7D3brA1orKjvwHuH68RajAZr+kIL7pH5acIJqunyLNjautVo6WRzwEW5r6MjF885ulhc30AC3/6TgZauDdeV7ozIS8MHP/iEEGz+mD86VyTXzR6R3WfJD/VNSKETLBQHLN8DX0dJiiXabhKNgcrWAjlfVJp4gsoKVejz1OPr6NBnTo8vh8Pm+zhH/sql+gsNJCWmqmVyvZHdD2HliZfu/b8sEo9zR+aI/ZrcSt+TARpGI7qyRuEv7ZSwNQ9/XH4OfvfcVmTWmnHTyAv9Dtat77ChGeloTC9ATWE2/ltViSklkzF2/jAcWrUKo0rPwanmt/wmulHvT50WDZ0EZGQD87+CzeYVuPqf76DQ0ISfXDFZO06f/7ACL247hcuml+DrF4wWZXQHDx/Ef9/biklprVgx3Kn0HzWf0cIdHG4jbEk5SM0uAFJyRSCFuIjvqfa05+DfeCE/Px8mkwnV1d51i/RzcXHvw5x/9atfCaHz1ltvYfr06QFvZ7VaxcUXWkAMZBEhAmXUYaFGSwpMMboQGejrG0xifRt5+0KDty++t2+gBPuaWOgMMeaNyhFChxwA/VwSCfW4yIU1iSLpoFCZlBRBu043i7jqF7ZWiN+dP64g4CJ/tCp0anUaRDb397bo7BlGYAvs6PSSKNYfqMTOV+jo+2v8Qb97844Lgnp8+Tj9EQLvHFRKCAuT3T3eLxmtfaaxA3aHUhvor7wukPNFfVh6TuoSv/z16MhkPU3o+Dg6UniEUrpGQ1rl8/SFTLILRujIeGnfgaH+OHd0niZ0blwwMuDtpGAkEXz+uHxxTNG+TScDpg/zOGO+iWu5aVbPZ6ET5/S56OPc6fFpICml+FHJIUVO6+feSJeP+nOq3bkomrSAbC5xfVdBNva4LRhjKAXKlEGmB1rH4wlnORbk52HFF87VvTmteGTNAfz6g2p8+ZzR+PHlk5FoJCUliXhoChK48sorxXUul0v8fNtttwW83y9/+Uv87Gc/w5tvvom5c+cO4hYrw2ql0DHwDB2GYZiI4L/uiIlZlkwuFgszKknz56aI5DWVT0zyRKrSbeXZYmpgp7Sof26n3gbg8/N6ujm+gQRejk4wQkd1C2iBR83zmqPjR+h4EsVCEzpaGEGEmrG15DX19QfDP7YppYFzC3RNTrowArndNEslUOJaoOQ12Z9D6W2+jg6Vp1Fjuv6z0AcSEDQzyJ+jQw3v5Pr1F3pOGZQxNUCogx65L/QlrGhfdbiV/S+Y3qhzRyu9bB8eaxBOSiBOq8Nl6XMgMTJ/VJ4WM+0POcOGktE0ca4KeYJSDYkReamin4veD7lPS5FECWkySIIgx4kct5F5qSjNSulRRqgX1Z5hoT7HkDUD6Vn0mg3arJ5EhMrKaDbOn/70J+zfvx9f//rX0d7erqWwUZKaPqyA4qR//OMfi1S2kSNHitk7dGlrU0pNIw0N0k02qPs+lxQyDMNEBBY6QwwSHlt+dAke+uwMv7/Xp5Yt1gkdQgqdj042irACOuNPZ/UvmVTU6/MRekfHMyw0sFNCC1Ja1ElXR3N01MW0nuLMlJAdnQ6HR4BQ6lok6O8sHUpRo8U26dF5BT0X3LJHh1w2WYLm28ejpzjL+32SQufSqUppzsmGdq9FOZkL9Nz6hfFU1Wmxmo09RAP9LEu2BlK+dqy2TYgk+twp3KIvpIPU13O1SztHODp9C51pZdniZAC9B7I/yh8yWlo6a+eNzdMGh/Y2LNRL6OgcHb2jqBexyn27e7g5spzwne9chDduv0CUpva2rzX0Uv5JqWv6bUxErr32WlGGds8992DmzJnYuXMnVq9erQUUVFRUoLJSCR4hfvvb34q0tquvvholJSXahR5jMHC42NFhGIaJNFy6NgShBK5AyAhlEii+Uc1S6FAggc2pLLyvmTtMpLIFQpZSnWk3iOjgYIaFSgeJnARawNNijwYZ9uXo0CKt2+GE1dx3eZIv9apGIuFGaWuRgBLRiGB7dP65TXHMzh+bhxxrz8xjSqCTYQ909p+Ehr9yRElxlhyO2SVuv/OUInSunFUm3DmKCZf9V7JsjRbl+gGos4bn4GI1btzXEaSfSYjS50DCVEZa97tsrSTTa9EeiOwUGUbQ+/sphTWJs972VUmS2RhUnw6FQOh7pRaOyRdft55oEGVm9Dh+S9fSk/wGaPg6ipSkp7hGeaK3Sy9I9PhzqfwJHc3R8XMMSQGlH2iaiFCZWqBSNQoa0HPixAlEE3J0rCx0GIZhIgo7OnEG9d48eu0MrPzCnB4LWSpbosUiDSjccEgZJuovhEAP9VqkJZnQ4TRgv9rb0dKlhhH0cXZdBhIcrFbuR2tfmS7me2aftkvf09Nf6ruV1zpcl7gWudK1voUOCZGX1NLAq2f7T3Ojz0e6CYR+joo/pPNFs4loVhIJAHJP5o/K9ZSvqX06MnHNtw+HFu9/vHkefrB8ot/nCCV5TSau+cZYByJbdSZI6PVWKteuCp1g+nP0fTr6+HR/SGEi3Rdy06icj1wpfZqdpEG6MjpHp7q5WyuPO6WWwpGjI9066fJIAeJbLhgITejoPofe+tzk5yydIyb2URwd9fPlgaEMwzARgYVOnEEL5U/PGtYjkU0ucmfomqwXjc0XqWS9QWfQ56pOEM1H0Z9h783RIQrUQIJDqkCiBZq/M/20zaH26UhHJ5LDEvtTurbhcK04208i7hNqxLc/5CK7r8Q1Qr5H5A5sVhfw04dlCcdmRH6qZ7irn8S1YJGlhQMROtLR0fcB9UZGkKVyNKCVSNP1toSjT8dTupaq7YcLVFdn49H6XkrXrJqIp7lKsqRMP7BWRpzLPiCPSLL2e1+T2y+FTo8eHd11VK7XW18SEzvYHW5YtR4ddnQYhmEiAQudBGPOSM8MkuvmDQ/qPvNHK/f5UAodtXTNnzujp8jH0ZE9GX5vmxlaxLTH0Ymc0JE9SS2dfYcR/FMNIbhyZpnmVvlD7+iM66U/x9f5Wr23SitFI0bkpml9QaEInf7MttFDi2tKKyOmlAXn6JCwCCZ5zePoBC90gunT8S1dI84bE7hPR1+6RicNpDtDDpt36VqKJp5OqwEFWulakI6OPFYoxU2WfTa0yx6dwEKHyqH6E5bBRA92dBiGYSIPC50EY97IXK38ZsnkwCEEes4dpdxn64kmEYkqHR1ZLtVXxPRhVej468/xdSuqYtjRoYGhwZSu0eJ67T6lJ+eaub2XBpZle7Z3XGHgxDVf52uT6jjMUgeEDs8Lj6Ojla71M4yAFvm0wLaYDH2+jv5GWmsOYj9K12SfTqDyNUpyk6K6XCc2F6hCh/qf6Db+UtfyVVdGK19r6QZpkVpVzCila96OjuYG+ZQSBoJEGr2Xerertx4d6suSx2MiJ68NJUTqmtqjw44OwzBMZGChk2BcOL4AP1wxEStvmNOj2ToQ1FyeYnKLBSeVJ7VqC8++enSsXqVH1HzfV6KYb+kaiYrLn3gPX3t+u7Zo7M3RiVTiGiHdh77CCF7ZcUYsYqaVZfU5T8a3R6cv5OJajmuZOVwROiNUgXfSp0dHP0MnGIINCAjUn0Mlk8HuV8rz9e3otKmpa/1xdPrq0yFBTe8hxUDr+5ho/yGRQZ/fKd1cInKsZP8LOTqEPpCgQdUWJDZoP5H7If2Ogg2k+Ai2R0fvdsnytQZVDPpLXdNvVyInrw0lSEhrQocdHYZhmIjAQifBoB6Zr1wwBueozk4wUB/FmExlZb3pWD1atdS13qfSyj4Gib8m6r4cnY1H6rHnTIso1Vr66Ab8/r1jwlXybfyXC03pbES2dC3wopwWpLJsjRLt+kIKHVpc60uoAlGim7WiDIFN9nrdFVrpWtcAS9ek8LANrD+nJLj+HN99orfna7ep+1s/enT66tORZWul2clefWP0vYxUP1briesmcU/iR7qh+nJLcnSk0B6WmypECgkaKjMkMUXOkSx7C7ZHRx9+QSKQAhvkwNFAzqjcrkRPXhsqUFmiZ44OOzoMwzCRgIUOExRjpdA5Wo82tXSrzx4dtXRN0ruj0zOul5B9H7RopF6F/3t9//+3dyfQUVX3A8dvIEDAhAQIkLBvERFiLAgUUaSCLFplccGlR9wP1I1qqdb+C2qrUj3aqqf/1qN/pT1uqAWsPVpBBEQrWFxARRAQZAdRdghkef/zuzN3eDOZffJm3jy+n3NCmDBhbt5M5r7f+/3u76qx//tBYGNKsw9NjZWjS32itWd2uhmBtN+e8e/VavWOAzqrcVFF+G5rdqd1KFLjf9ReTR3ZM66WzOY4ib7+9TnCNJWQEjIJBJNuRpBk17Uv/M9TnzjX59R5vGjNCAIZncTahkdbp2PW05i1NHbdWvsDnd3Hv+cHf/AgHQilTCwoON9fGSidNF3/7B315LEC2aAw62vieb2Zsjl5XZn9qUKZsjg6r2WHanvpGhkdAHAEgQ7iUlZoBfYYMSfBMdfo1ENGx5RE3XN+LzVjfLney0YyPBOf/Ugd9l/pNy2VZWd508XLCeYKu5TihWaV5Gr7Ha98pp5a/I2+/auRPQPrXaKR8T424XR13Vld4xqDPZD7kb9szXxdyrDkKrGU/5lAx5QPxqvQZFiOJJfROTXOjmuJlMol04wg1jod03EtXBatmz+jI/vgGKFla5EyOvbSSbNeTNZNBdb3xFm6FloqucffiEDW50RqQW7+bzI62aHKtmEoGR0AcAaBDuLSrplvPYVkVb7xnwDGai8ti/ft6zWiNSMwmYpdByqDgogv/CfQ5R0K1eUDOqkFdw7Vi70li/PMkg1Be5WYlr5OsWewTPme7+9V6rqZ/1VzP9umA5dHLjlN3XB2N0fGYM/omI5rQh7X/Pxf7zwQ6LzVOj8vydK1+DM6u/b7AiuJMXuVxt+IIDiDFLt0TbIpiYq0Tmfr3sN12nsb3fwb7a63la4FOq7ZSs9MGaF0XQvXDMNkdD7fui+wpipcx7RY65d0RiewPify95tsEc0IsoPeMDTHdF1L7IIEACA+BDqIi5zE9re1po6nGYFcebZnFKKVrkknq9wGOfqE0CykDzqBLmkeKMWSMi/x1OL1avfBo7YyJGcDHdlTyJxsm/I12ejyiqeXqvfX7dYlRf838Qx1aYxOa6mQrJWQ7E1oUGHK1z7+dk/gPqZTXKIZlmhd0CJlcyRAaJbgOpp4AqvjpWuJ/d/2dTpScmkPoKO9ZsKt0TEL/IttgUZJoe+1vcOW0bG3NzfZnRWb9waCOnkNJVO6ZjquRfsdMut/aEaQHeT1eLx0jYwOADiBQAcJnzQasTI69vKeWKVrsj7l+F46lUHrPqQbWVPb1fwLykv1RplSQvbEgrVq8w912wQ7Xb5mWkz/+4sdupROTkBn3TRIDe0ZeXPQ+iBd3GRNz69G9VRNcoMzHOYke/nGPYGgMFKZUySlRSazdjRQbhWLWUfVJ0aHuWRL5Y63l0480JE1UJLp2HO4Sgej0fbQCV2jI0G0eZ7NsbCvsTGvV8nufeff/smeVTTrf8w+UqZZQFKBThwZHbNHD6VrWbhGpxFrdADACQQ6iNuPu7YI24UsGntGJ9qGoUENCUygs9WXKegTsu5DgqK7R5+i//7isk3q40170hfohGwaOvvTrfrz1YO66PI6p5k1PeFK4zr7O6+t2OLLIBQnuD5Hf09+E3VKSYGSJmVL1n4X1/eY56l3gutz4m0vfXyNTuKla5JBufC0Uv332Z9sDTSN2GYCnTCvmYK8RoEmDhv8WR37ZqH2+5ngq8ryd12zrdEx2SLpCpjIHjp1uq7ZMjrh9tAxTJtsmhFkhyrpukZGBwAcRaCDuJW1yQ9clZYyM+mEFktw6VrjBAMdX6agd/u6J9Bndi9WP+nZWi++37q30vE9dMJdZZfSuvf9wcC4H8XusOY0E+gc9bchTrQRgX2vJfHe18czINF8ud08T4lndMxrImqgcyz50jUxvq+vzfe8VTv0eirJVsn6CAkaI3XpC5Sv+TuvmeDBbBYarrOgHG/TkS3c5rWJNCKo03UtoTU6ZHSyZh+dQHtpMjoA4AQCHcRNyqDM4m4pW4unLKpNUOla9IxOqW0DRvvaj0glUXeP7qXX7xhOr9ERZs2LlDT9c8U2vaaob6ci1cV/YpxJnVoGjyHR1tLGEBPorP2uzv4zoRau3hUoHUx0D53gTS6PBvaJiZjRSaIZgZAyx+6tT1KVVbXqrS92BBoRSJCTG2HNjNzfntEJV7oWbl8jOylntLeCTmQPHXup576grmtR1uj4j6WUuZkskvhoww+BEjy4tb00GR0AcAKBDhLy4+7+QCfOq+vmZFv2M7Ff7Y6W0ZE1OnJiadZRyLqUcHqWFKiL/Vfrmza0VGGCC+9TWqNzpCpQCjXOP4ZMk/Uh9tizdYKlUoa0ZJbnSxpBfLXdt74klLT2/p+5n6trZ/5X3z67rDiudtqh2hXm6cyFZFhW7zi+N1K4ZgTJrNEREpCbrM7sT7YEGhGEK1szuhX7O6/tjly6FroGrUPIeh95XHuW0QQiSbWXjiej4w+MJMYxXeyOHKvRHQEHPPCOWheylxAyq1q3l/YHoGR0AMARBDpIyMhT2+q1AKa8KRZzIhitW1Td0rUjgQXuUkIkayEiuXNET331vX9rK+GF96ms0ZH9hFZt3683Kf1puW8NSKZJcwLTlS2VjI78P6bxhGR1QkkXsZ8+8b56fukmffu6wV3V01efkdRjyXNW0dG3H9Bn/u5k9dmMwBjrLy1c+s0POsMRKwMY2nktUuma6bwWqb25/TESXaMTbsPQaOWfkp0yWVPTee3tL3fo4yevBbM/ENyhqrrG1l6ajA4AOIFABwmRUrSP7hmmHhhXHtf9+3VuoUuHLusfu+VyqS2jc3yBe/OYwdG/bxusLu4avuzJqYzOgtW79Oef9GyT0N4oTrO3N0420AkqX/s6ONDZuPuQuuypD/VeSlL69cINA9W0C0+Nma2L5vQogY40Dji+Rif5x5DuaoP8ZZevLt8SNgMTrvOa/LwyhkDpWkhWpiRK6Vro11LpuhapdC6UeQyTgXrtY9/PKplPaeIB97CqbJsjk9EBAEcQ6CBhiZwwyVX4f95ylpoy/OSY9y2xbcD4+VbfSW+fMI0IMsmcfJqlK25oQhCuIUGqgY7J2EmrailTMx5fsFY3Ozijcwv19pQhanCP4hRHLIFOYcRA53CVL8gRJyW4R0+o8X19z9Ux/3469g5poaSRgDTcOFJVo9buOqhL68IFK/ZmBuG6/tkbEiQb6Mh6G7O3VKyg2mSNJAMlpZ8frPc1lDAlnnBpoENGBwAcQaAD15CuVVJ9JieVH6z7Pmxr6Uxrbts7SP5+bi9n981JVCd7oJPkGh1TuiXZCAkKln7jey7W7jyg5n7mW5c0/cLeSa3JCaeiQ1GgTMxsxGocrPQFWTnKUnmNUnu7Gl1eGvR/RFujI22pTXZMyhRNM4TQzFWsQCeV0jUZq2z6ag+so7WXtnd2k4zOnE+26O+TTFZoBzhkXk61b61YjWqoVEPn1xcCwImIQAeuISeX5uTcnPDGKl1LN1O6Ji44rV2dTTszrbOt81oqGR1ZO3O8fM2XFXhs/tf6xHlU75J63TNIAgCzvmWlfw8g4+Nv/Zuf5vnGlArJLo7sXRK4HW6z0HDla8v9gU5o2ZqQccs6LWmGYW9MYNizRom2l5af1x5MSjt3+8a54ZjSNtns1JStXdKPbI4bWdW+jE5Vg+R/TwEA0RHowFXMOh1zIuqm9S/2ciJ7KZSbmEX0sig9lXUzYkjZ8XU6sqeRtGaWWOOOEbHLEBN1escWgUYHdgu+2qk/924Rvc11vEz3Nfk5Sovy4jqW/924J2J7aGkB/dzEfmryqTV6X55Q0nZcMkHSwCOeDXajvd5irc+xj3HelzvVxu8P68ceXX48uIN75PgDnWoCHQBwDPlyuIo0F1ixxddxrU8SG1A6TU5+G+c20B2sZJ2K2/QqLVC3DSsL7AOTijN7tNIn79J44O7ZK/XXxlS0Uye3LVD1TRoSvLFiW9A6neqaWvXuGl/Thz4t66fZxFk9itXEQZ11U41Y2bhurX0tpk2b80hrbAZ2bam+/yrKGrVbz9IlaMk0A7AHOrE23LVnjdbs9LUFP7+8VDVLcW0TnA10agh0AMAxzIBwFfuaB7etzxFSnjRvyhBdwpaOdtaJkjHdcV79ZFwkAyGboUpGQ7rgSdBzexxNJVJrSLBPb1IqP8cnm/aqvYer9P5IXQuON0RIhfwM943pE9d9Q9sxx5NRCae7P2BKRsIZnZB1QJStZUFGpyGBDgA4hdI1uIq9Xa/bOq7Zy5GSPenNNvb9ki7p2yFQzlXfercr1F3OZG2JyaCYsrVzylqrhhmIKbuGZMUSbSZQH4IyOnG85uyvS2mm0L+Lbz8kuE9Fie+5atyERhEA4BQCHbh2jU5vF5aunWiG9vR1lZPSq9uGlzn2OLKeqFep7/k25Wvz/YHOsFPi25y2vkljjALbJqWJtoeuD8Gla7HX+NgbHrB3jrv1LfVd1DnppOQzfgCA6Ah04Cqm5W/b5k1UmwI20cs0yar94eJy9dTV/WJ2KUtVhb98TRoSbNh9SLeblizP2WW+jT7TTcrnTOc1kYksXqJrdFoX5AWaIrixWQZs/O2l2SwUAJzDGh24Sr9OLdTNP+mu+nZy30L/E9WE/p3S8jjSee35pZt0Rse0ah7YraUqSKJbWX2RUj3THKNVgu2h60Oia3Tk/o9dVqFyGzRg7xy386/RUbkEOgDgFAIduIqU2kwdeUqmh4EMMA0JPt8qDQl8Xxveq21Gx2Q6r0VqL+22NTpizOlkcrJBTpUJdJzNlALAiYzSNQCu0K04XxXk5arKqlq13L9RaKYDHXvzhXAbhqY1oxNH6RqyCKVrAOA4Ah0ArsnmVXQoCtw+uW1+xsuv7Gt0MtKMwNaAQDaBhfdK1yxK1wDAMQQ6AFzDNCRwQzZHlLUp0N3gzi4r1p3h0q0owTU6yMY1OpSuAYBTWKMDwDWkIYExzAWBTuPcBurN287K2OPbMzrxdF1DFjFrdChdAwDHEOgAcI0zOrdQzfNyVXF+E3V6x+NlbJkkbaYzRfbyuXJgJ5XfJFc1bZz+jBIcRNc1AHAcgQ4A15DOYu/ccY5q1LBBYD+YE5kEWQ+OK8/0MOCA2oGT1bL9bVX/PpcoQlgAcAaBDgBXaePfQwfwtFY91HfN+yjVomumRwIAnkUzAgAAAACeQ6ADAAAAwHMIdAAAAAB4DoEOAAAAAM8h0AEAAADgOQQ6AAAAADyHQAcAAACA5xDoAAAAAPAcAh0AAAAAnkOgAwAAAMBzCHQAAAAAeA6BDgAAAADPIdABAAAA4DkEOgAAAAA8J1dlAcuy9Of9+/cn9f1VVVXq8OHD+vsbNWqk3IbxpYbxpYbxeXt8qTLvu+Z9GD7MS5nn9jEyvtQwPm+PL11zU1YEOgcOHNCfO3bsmOmhAMAJSd6HCwsLMz0M12BeAgD3z005VhZcpqutrVXbtm1TBQUFKicnJ6moTyajzZs3q+bNmyu3YXypYXypYXzeHl+qZIqQiaRdu3aqQQOqnQ3mpcxz+xgZX2oYn7fHl665KSsyOvIDdOjQIeX/R55oNz/ZjC81jC81jM/b40sFmZy6mJfcw+1jZHypYXzeHp/TcxOX5wAAAAB4DoEOAAAAAM85IQKdJk2aqOnTp+vPbsT4UsP4UsP4vD0+uJPbXzduH182jJHxpYbxeXt86ZIVzQgAAAAAIBEnREYHAAAAwImFQAcAAACA5xDoAAAAAPCcEyrQkU3d5s6dq9zIzWMLZ+PGjXrMn332mXIrt49x0aJFenx79+5VbuTm8bl5bNkwPriLm9//3Ty2bHzfd/v4suH9y83jc/PYsmF8TvBcoPPnP/9ZdenSReXl5amBAweqjz76SLnBvffeq19c9o9TTjklY+N577331IUXXqh3lA03kUmPimnTpqnS0lLVtGlTNXz4cLV27VpXjfGaa66pc0xHjRqVlrE99NBDqn///npX9DZt2qixY8eqNWvWBN2nsrJS3XzzzapVq1YqPz9fXXzxxWrnzp2uGd/QoUPrHL9JkyalZXx/+ctf1GmnnRbYyGzQoEHqrbfecsWxi2d8mTx2yE7MTd6Ym9w8LwnmptQwN3mPpwKdWbNmqTvuuEO30/vkk09URUWFGjlypNq1a5dyg969e6vt27cHPt5///2MjeXQoUP6+MjkG87DDz+snnjiCfXXv/5VLVu2TJ100kn6WMovuVvGKGQCsR/Tl156KS1jW7x4sX6zW7p0qZo/f76qqqpSI0aM0GM2fvGLX6g33nhDvfrqq/r+27ZtU+PHj3fN+MSNN94YdPzkeU8H2VF+xowZ6uOPP1bLly9X5557rhozZoz68ssvM37s4hlfJo8dsg9zk3fmJjfPS4K5KTXMTR5keciAAQOsm2++OXC7pqbGateunfXQQw/p2/LjzpkzJ/Dv06ZNs0pKSqwVK1Y4Prbp06dbFRUVEf89k2MLfeza2lr92I888kjga3v37rWaNGlivfTSS/r2hg0b9Pd9+umn+nZ1dbV17bXXWj179rS+/fZbx8coJk6caI0ZMybi96RzjLt27dKPtXjx4sDxatSokfXqq68G7vPVV1/p+3z44Yf69sKFC/XtPXv26NuHDh2yRo0aZZ155pmBrzk1PnHOOedYt99+e8TvSef4RIsWLaxnnnnGdccudHxuPHZwN+Ymb85Nbp+XBHNT6pibsptnMjrHjh3TEa6ksY0GDRro2x9++GHQfeX96dZbb1V///vf1ZIlS3QaMB0kvS7p7m7duqmrrrpKbdq0qc59MjU2uw0bNqgdO3YEHcvCwkJdbhF6LMXRo0fVpZdeqmuOZcydOnVKa72ppL979uypJk+erL7//vuw93N6jPv27dOfW7ZsqT/La1GuVNmPoZSDyOOGO4ZSL3veeeep2tpafZWrqKjI0fEZL7zwgiouLlZ9+vRRv/71r9Xhw4fDfr+T46upqVEvv/yyvqInaXi3HbvQ8bnp2MH9mJtOvLnJLfOSYG5KHnOTN+Qqj9i9e7d+0tu2bRv0dbm9evXqwO3q6mr1s5/9TH366ac6Pd++ffu0jE/eiGfOnKnf+CSVeN9996mzzz5bffHFF7pWNZNjCyUTiQh3LM2/GQcPHlQXXHCBfsNeuHChnnTSRcoDJGXctWtXtX79enXPPfeo0aNH6zechg0bpm2M8iYxZcoUNXjwYP3GIuQ4NW7cuM4bR7hjKLcnTJigysrK1Isvvqi/z+nxiSuvvFJ17txZn+CsXLlS3XXXXbpWevbs2WkZ3+eff67fnKXkRGqd58yZo0499VQ96bvh2EUanxuOHbIHc9OJNTe5ZV4SzE3JYW7yFs8EOvGS+somTZro+lCJeNNF3ugMuRImk4u8GF955RV1/fXXZ3Rsqbjiiit0zei7776rF4am0+WXXx74e3l5uT6u3bt311fThg0blrYxSr2xnBQkW9cuV1QGDBig6/jtE6HT47vpppuCjp8s7pXjJpOzHEenxycnVjJxyBW91157TU2cOFHXPLvl2EUan0womT528B7mJm/MTW6ZlwRzU3KYm7zFM6Vr8uYrT1Zo9wu5XVJSEvTkbt26Vb399tsqk+SKwMknn6zWrVvnurGZ4xXrWIrzzz9fXzUIl7ZNNym7kNeB/Zg6PcZbbrlF/etf/9JX5GTSMuQ4SclKaAvHcMdQrupJJ59Vq1albXzhyAmOCD1+To1PriD16NFD9evXT3fikQW+jz/+uGuOXaTxueHYIXswN53Yc1Mm5iXB3JQ85iZv8UygI0+8POkLFiwISovKbXvt4kUXXaTTdDfccIOubcwUSVtLhC3RttvGJil3+aW1H8v9+/frDjf2Yymk/lg6gMjYE73iUd+2bNmia6Htx9SpMUq9urxRS8pYrsjJMbOT12KjRo2CjqGkj6X2PfQYytjkioxcdamvN51Y4wvH7OsQevycGF848vsqZRyZPnaxxufGYwf3Ym46seemdM5Lgrmp/jE3ZTnLQ15++WXdfWXmzJnWqlWrrJtuuskqKiqyduzYUadDinTNyMvLC+qe4aQ777zTWrRoke648sEHH1jDhw+3iouLdceRTIztwIEDuuuLfMhjP/bYY/rvpuvLjBkz9LF7/fXXrZUrV+ouMl27drWOHDkStnPMH//4Rys/P99asmRJWsYo//bLX/5SdzqRsbzzzjtW3759rbKyMquystLxMU6ePNkqLCzUz+n27dsDH4cPHw7cZ9KkSVanTp2sd99911q+fLk1aNAg/RGp+8mUKVOstm3b6i4uTo9v3bp11v3336/HJcdJnudu3bpZQ4YMScv47r77bt1lRx5bXl9yOycnx5o3b17Gj12s8WX62CH7MDd5Z25y87wkmJtSw9zkPZ4KdMSTTz6pX4SNGzfWLT2XLl0asRXkrFmz9Jv2P/7xD8fHNWHCBKu0tFSPq3379vq2vCgzNTbzYg/9kNaYpo3nb3/7W/0LIBP0sGHDrDVr1gS+P/TNWjz66KNWQUGBniydHqO8KY4YMcJq3bq1bvfYuXNn68YbbwycODg9xnDjko/nnnsucB+ZeH/+85/r1o/NmjWzxo0bp9/QQ38+e0vHW2+9Vb9O7MfaifFt2rRJv/m1bNlSP789evSwpk6dau3bty8t47vuuuv0cya/D/IcyuvLTCSZPnaxxpfpY4fsxNzkjbnJzfOSYG5ibmJuCpYjf2Q6qwQAAAAA9ckza3QAAAAAwCDQAQAAAOA5BDoAAAAAPIdABwAAAIDnEOgAAAAA8BwCHQAAAACeQ6ADAAAAwHMIdAAAAAB4DoEOUE+uueYaNXbs2EwPAwAAjXkJJzoCHQAAAACeQ6ADJOi1115T5eXlqmnTpqpVq1Zq+PDhaurUqepvf/ubev3111VOTo7+WLRokb7/5s2b1WWXXaaKiopUy5Yt1ZgxY9TGjRvrXHG77777VOvWrVXz5s3VpEmT1LFjxzL4UwIAsgXzEhBeboSvAwhj+/bt6oorrlAPP/ywGjdunDpw4IBasmSJuvrqq9WmTZvU/v371XPPPafvK5NHVVWVGjlypBo0aJC+X25urvr973+vRo0apVauXKkaN26s77tgwQKVl5enJyGZbK699lo9WT3wwAMZ/okBAG7GvARERqADJDihVFdXq/Hjx6vOnTvrr8lVNCFX0o4ePapKSkoC93/++edVbW2teuaZZ/TVNCETjlxFk8ljxIgR+msysTz77LOqWbNmqnfv3ur+++/XV+N+97vfqQYNSLwCAMJjXgIi45UKJKCiokINGzZMTyKXXnqpevrpp9WePXsi3n/FihVq3bp1qqCgQOXn5+sPuaJWWVmp1q9fH/T/ymRiyJW2gwcP6vICAAAiYV4CIiOjAySgYcOGav78+eo///mPmjdvnnryySfVb37zG7Vs2bKw95dJoV+/fuqFF16o829S9wwAQCqYl4DICHSABEmqf/Dgwfpj2rRpulRgzpw5Os1fU1MTdN++ffuqWbNmqTZt2ujFnNGusB05ckSXGYilS5fqq2wdO3Z0/OcBAGQ35iUgPErXgATIFbIHH3xQLV++XC/ynD17tvruu+9Ur169VJcuXfRCzjVr1qjdu3frBZ9XXXWVKi4u1h1tZNHnhg0bdA30bbfdprZs2RL4f6WTzfXXX69WrVql3nzzTTV9+nR1yy23UAcNAIiKeQmIjIwOkAC5+vXee++pP/3pT7qTjVw1e/TRR9Xo0aPVGWecoScL+SylAQsXLlRDhw7V97/rrrv0QlHphtO+fXtdT22/kia3y8rK1JAhQ/TCUemgc++992b0ZwUAuB/zEhBZjmVZVpR/B+Aw2a9g7969au7cuZkeCgAAzEvwDPKPAAAAADyHQAcAAACA51C6BgAAAMBzyOgAAAAA8BwCHQAAAACeQ6ADAAAAwHMIdAAAAAB4DoEOAAAAAM8h0AEAAADgOQQ6AAAAADyHQAcAAACA5xDoAAAAAFBe8/8Du9ueZk+0rwAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 37
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "model = NeuralNetwork() #上线时加载模型\n",
    "model = model.to(device)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T13:38:09.347316Z",
     "start_time": "2025-01-16T13:38:09.341663Z"
    }
   },
   "outputs": [],
   "execution_count": 38
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T13:38:12.229917Z",
     "start_time": "2025-01-16T13:38:10.706414Z"
    }
   },
   "source": [
    "# dataload for evaluating\n",
    "#模型保存有两种情况，一种是模型结构和模型参数都保存，一种是只保存模型参数，这里是只保存模型参数，所以需要加上weights_only=True\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", weights_only=True,map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, val_loader, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.3467\n",
      "accuracy: 0.8748\n"
     ]
    }
   ],
   "execution_count": 39
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
